>> [MUSIC SPIEL]
>> ZAMYLA CHAN: Lassen Sie uns Schlag Dinge mit Größenänderung.
In Größenänderung, wird der Benutzer übergeben, über Die Kommandozeile, ein Bitmap-Bild, dass
Sie skalieren sie durch eine Reihe wollen dass sie auch in übergeben,
in der Befehlszeile.
Wie können wir das tun?
>> Nun, das Wichtigste zuerst, lassen Sie uns brechen diese in Schritte.
Sie werden, um die Eingabedatei öffnen wollen dass sie Ihnen, wie auch
erstellen und öffnen Sie die Ausgabedatei, die Sie gehen zu setzen sind die
skalierte Bild in.
Dann, weil Sie Größenänderung, und denn es ist eine Bitmap, es ist eine Kopfzeile, so
Sie gehen auch die Kopfzeile zu aktualisieren sind Informationen für die Ausgabedatei,
und schreiben, dass in.
Dann wirst du in lesen die Scanline der Eingabedatei,
Pixel-für-Pixel-horizontal Skalieren und Schreiben die Pixel in der
Ausgabedatei wie angegeben nach Skala des Benutzers.
>> Du wirst daran zu erinnern, Sie Polstermaterial wie nötig.
Mehr dazu später.
Und dann auch vertikal zu ändern.
OK.
Also, das wird ein bisschen mehr sein komplizierter als Who Done It, aber
was ähnlich ist, dass copy.c will, wieder als sehr nützlich erweisen.
Beachten Sie, dass copy.c öffnet eine Datei, aktualisiert die Header-Informationen für die
Ausgabedatei, liest dann in den Scanline, Pixel-für-Pixel, das Schreiben jedes Pixel
Scanline in der Ausgabedatei.
>> Also noch einmal, könnte wohl der erste Schritt sein, cp, copy.c, resize.c
in Ihre PSET5 Verzeichnis.
Denken Sie jedoch daran, bevor Sie es kopieren, um sicherzustellen, dass Sie verstehen,
copy.c sehr gründlich.
OK.
>> Lassen Sie uns also eine Datei öffnen.
Sie wissen, wie das zu tun.
Ich werde das auf Sie verlassen.
Weiter, aktualisieren Sie die Header-Informationen für die Ausgabedatei.
Weil wir eine neue Bitmap, wir haben neue Header-Informationen.
Was ändert sich hier?
Nun, ist die Dateigröße sich ändern denn wir werden mehr zu haben
Pixel als zuvor.
Die Bildgröße ist daher auch wird sich ändern, ebenso wie die
Breite und Höhe.
>> Also welche Variablen das sind genau?
Nun, wenn Sie in die Kopfzeile aussehen Informationen finden Sie gibt es
BiSizeImage, die die Gesamt stellt Größe des Bildes in Bytes,
einschließlich Pixel und Polsterung.
biWidth ist die Breite des Bild in Pixel, abzüglich der Polsterung.
BiHeight die Höhe das Bild in Pixel.
Und damit diejenigen, die enthalten sind in Strukturen und BITMAP
BITMAP.
Sie können sagen, die man durch ist, welche werde bmp.h und Blick auf die
BITMAP Struktur und Sehen die Variablen werden dort aufgelistet.
>> So um die outfiles Kopf aktualisieren Informationen, Sie gehen zu wollen sind
ändern die Werte der Höhe und Breite.
Aber die Chancen sind, können Sie einige brauchen Header-Informationen der Eingabedatei ist
später, also am besten den Überblick über beide halten.
Aber ganz klar mit der variablen Namen, so dass Sie nicht versehentlich
schreiben die falsche Werte in die Header für die Ausgabedatei.
>> So, jetzt ist das Lesen in zu erhalten lassen die Abtastzeile Pixel-für-Pixel.
Auch hier werden wir unsere treuen drehen Datei I / O-Bibliothek, und schauen Sie sich
die Funktion fread.
fread nimmt einen Zeiger auf eine Struktur, das wird die Bytes enthalten, die
Sie lesen in der Größe von jeweils Element, das Sie gerade lesen -
einmal wird sizeof gehen, nützlich zu sein Hier funktionieren die Anzahl der
Elemente der Größe, Größe, dass Sie Einlesen und dann schließlich die
inpointer, die Datei, die Sie lesen.
So können Sie unter Anzahl Elemente sind von der Größe von inpointer und
setzen sie in Daten.
>> Jetzt ist es Zeit, um horizontal zu ändern.
wenn n gleich 2 ist, dann für jedes Pixel in die Eingabedatei, wir gehen, es zu schreiben
zweimal in der Ausgabedatei.
Wie können wir Dateien schreiben?
Nun, wir haben die fwrite-Funktion, so wir haben den Zeiger auf die Struktur genommen
dass die Bytes, die Sie enthält Schreiben aus, und dann gehen wir in
Grße, Anzahl und der Ausgang, wobei Sie gehen zu werden, schriftlich.
Und einen Vorgang zu wiederholen, wird in der Lage eine einfache iterative for-Schleife.
>> Aber wir müssen daran denken, Polsterung in. hinzufügen
Das Konzept der Polsterung ist, dass, na ja, jedes Pixel drei Bissen, aber die
Größe der einzelnen Scanline-Muss ein Vielfaches von 4 Bytes.
So dass, wenn die Anzahl der Pixel ist kein Vielfaches von 4, müssen wir einige hinzufügen
Polster, das nur Nullen ist.
Nun, im Gegensatz zu Who Done It, und im Gegensatz Kopie, dann infile Bild und das
outfile Datei unterschiedliche haben unterschiedliche Polsterung, weil sie
verschiedenen Breiten.
>> OK.
Also vielleicht eine Formel würde kommen in praktisch hier.
Ich werde es Ihnen überlassen, um es herauszufinden, aber Ihnen sagen, dass, Polsterung schreiben,
gut, es ist nur eine einfache fputc Funktion, vorbei an den Charakter
dass Sie schreiben wollen, und dann der Dateizeiger, die Sie
wollen, zu schreiben.
So, jetzt, dass wir horizontal geändert, und dann verwendet Polster,
daran erinnern, dass Sie Ihre Datei verschieben müssen Stellungsanzeige, weil Sie
kann nicht in fread Polsterung.
Sie wollen sicherstellen möchten, dass Ihre Datei Positionsanzeige in der Eingabedatei
ist an der richtigen Stelle.
Denn wir wollen auch die Größe vertikal.
Wir können nicht nur horizontal dehnen, weil jeder Zeile Bedürfnisse
n-mal kopiert werden.
>> Es sind mehrere unterschiedliche Möglichkeiten, dies zu tun.
So ein, können wir eine Rewrite-Methode verwenden, in dass wir uns erinnern, alle Pixel
einer gegebenen Zeile in einer Matrix, und dann schreiben wir das Array als
oft wie notwendig.
Oder gibt es die Methode, wo recopy, nach dem Lesen in einer Zeile in der Eingabedatei
und dann schriftlich mit, dass in die Ausgabedatei, Hinzufügen der Polsterung, wir fseek
zu Beginn der ursprünglichen Zeile zurück, und wiederholen Sie den horizontalen
Größenänderung von dort.
Unabhängig von der Methode, obwohl, werden Sie wollen, dass jeder Bildpunkt wiederholt werden
n-mal, und jeder Zeile sein n-mal wiederholt als gut.
>> Damit werden Sie Bitmap haben größer als das Leben.
Mein Name ist Zamyla, und dies ist CS50.