[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.