1 00:00:00,000 --> 00:00:10,210 >> [MUSIC SPIEL] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: Lassen Sie uns Schlag Dinge mit Größenänderung. 3 00:00:13,320 --> 00:00:17,710 In Größenänderung, wird der Benutzer übergeben, über Die Kommandozeile, ein Bitmap-Bild, dass 4 00:00:17,710 --> 00:00:21,860 Sie skalieren sie durch eine Reihe wollen dass sie auch in übergeben, 5 00:00:21,860 --> 00:00:23,770 in der Befehlszeile. 6 00:00:23,770 --> 00:00:24,690 Wie können wir das tun? 7 00:00:24,690 --> 00:00:28,270 >> Nun, das Wichtigste zuerst, lassen Sie uns brechen diese in Schritte. 8 00:00:28,270 --> 00:00:31,510 Sie werden, um die Eingabedatei öffnen wollen dass sie Ihnen, wie auch 9 00:00:31,510 --> 00:00:35,560 erstellen und öffnen Sie die Ausgabedatei, die Sie gehen zu setzen sind die 10 00:00:35,560 --> 00:00:38,020 skalierte Bild in. 11 00:00:38,020 --> 00:00:42,050 Dann, weil Sie Größenänderung, und denn es ist eine Bitmap, es ist eine Kopfzeile, so 12 00:00:42,050 --> 00:00:46,080 Sie gehen auch die Kopfzeile zu aktualisieren sind Informationen für die Ausgabedatei, 13 00:00:46,080 --> 00:00:47,950 und schreiben, dass in. 14 00:00:47,950 --> 00:00:51,850 Dann wirst du in lesen die Scanline der Eingabedatei, 15 00:00:51,850 --> 00:00:56,890 Pixel-für-Pixel-horizontal Skalieren und Schreiben die Pixel in der 16 00:00:56,890 --> 00:01:00,910 Ausgabedatei wie angegeben nach Skala des Benutzers. 17 00:01:00,910 --> 00:01:03,940 >> Du wirst daran zu erinnern, Sie Polstermaterial wie nötig. 18 00:01:03,940 --> 00:01:05,400 Mehr dazu später. 19 00:01:05,400 --> 00:01:07,790 Und dann auch vertikal zu ändern. 20 00:01:07,790 --> 00:01:08,890 OK. 21 00:01:08,890 --> 00:01:13,280 Also, das wird ein bisschen mehr sein komplizierter als Who Done It, aber 22 00:01:13,280 --> 00:01:18,310 was ähnlich ist, dass copy.c will, wieder als sehr nützlich erweisen. 23 00:01:18,310 --> 00:01:23,160 Beachten Sie, dass copy.c öffnet eine Datei, aktualisiert die Header-Informationen für die 24 00:01:23,160 --> 00:01:28,250 Ausgabedatei, liest dann in den Scanline, Pixel-für-Pixel, das Schreiben jedes Pixel 25 00:01:28,250 --> 00:01:30,510 Scanline in der Ausgabedatei. 26 00:01:30,510 --> 00:01:37,040 >> Also noch einmal, könnte wohl der erste Schritt sein, cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 in Ihre PSET5 Verzeichnis. 28 00:01:40,560 --> 00:01:43,920 Denken Sie jedoch daran, bevor Sie es kopieren, um sicherzustellen, dass Sie verstehen, 29 00:01:43,920 --> 00:01:46,600 copy.c sehr gründlich. 30 00:01:46,600 --> 00:01:47,620 OK. 31 00:01:47,620 --> 00:01:49,880 >> Lassen Sie uns also eine Datei öffnen. 32 00:01:49,880 --> 00:01:50,870 Sie wissen, wie das zu tun. 33 00:01:50,870 --> 00:01:52,600 Ich werde das auf Sie verlassen. 34 00:01:52,600 --> 00:01:56,050 Weiter, aktualisieren Sie die Header-Informationen für die Ausgabedatei. 35 00:01:56,050 --> 00:01:59,240 Weil wir eine neue Bitmap, wir haben neue Header-Informationen. 36 00:01:59,240 --> 00:02:00,970 Was ändert sich hier? 37 00:02:00,970 --> 00:02:06,000 Nun, ist die Dateigröße sich ändern denn wir werden mehr zu haben 38 00:02:06,000 --> 00:02:07,900 Pixel als zuvor. 39 00:02:07,900 --> 00:02:11,060 Die Bildgröße ist daher auch wird sich ändern, ebenso wie die 40 00:02:11,060 --> 00:02:13,050 Breite und Höhe. 41 00:02:13,050 --> 00:02:17,180 >> Also welche Variablen das sind genau? 42 00:02:17,180 --> 00:02:20,960 Nun, wenn Sie in die Kopfzeile aussehen Informationen finden Sie gibt es 43 00:02:20,960 --> 00:02:25,640 BiSizeImage, die die Gesamt stellt Größe des Bildes in Bytes, 44 00:02:25,640 --> 00:02:28,340 einschließlich Pixel und Polsterung. 45 00:02:28,340 --> 00:02:32,520 biWidth ist die Breite des Bild in Pixel, abzüglich der Polsterung. 46 00:02:32,520 --> 00:02:35,580 BiHeight die Höhe das Bild in Pixel. 47 00:02:35,580 --> 00:02:39,200 Und damit diejenigen, die enthalten sind in Strukturen und BITMAP 48 00:02:39,200 --> 00:02:40,390 BITMAP. 49 00:02:40,390 --> 00:02:45,300 Sie können sagen, die man durch ist, welche werde bmp.h und Blick auf die 50 00:02:45,300 --> 00:02:49,670 BITMAP Struktur und Sehen die Variablen werden dort aufgelistet. 51 00:02:49,670 --> 00:02:54,700 >> So um die outfiles Kopf aktualisieren Informationen, Sie gehen zu wollen sind 52 00:02:54,700 --> 00:02:57,025 ändern die Werte der Höhe und Breite. 53 00:02:57,025 --> 00:03:00,570 Aber die Chancen sind, können Sie einige brauchen Header-Informationen der Eingabedatei ist 54 00:03:00,570 --> 00:03:03,670 später, also am besten den Überblick über beide halten. 55 00:03:03,670 --> 00:03:07,770 Aber ganz klar mit der variablen Namen, so dass Sie nicht versehentlich 56 00:03:07,770 --> 00:03:12,490 schreiben die falsche Werte in die Header für die Ausgabedatei. 57 00:03:12,490 --> 00:03:16,160 >> So, jetzt ist das Lesen in zu erhalten lassen die Abtastzeile Pixel-für-Pixel. 58 00:03:16,160 --> 00:03:20,210 Auch hier werden wir unsere treuen drehen Datei I / O-Bibliothek, und schauen Sie sich 59 00:03:20,210 --> 00:03:22,100 die Funktion fread. 60 00:03:22,100 --> 00:03:26,150 fread nimmt einen Zeiger auf eine Struktur, das wird die Bytes enthalten, die 61 00:03:26,150 --> 00:03:30,130 Sie lesen in der Größe von jeweils Element, das Sie gerade lesen - 62 00:03:30,130 --> 00:03:34,410 einmal wird sizeof gehen, nützlich zu sein Hier funktionieren die Anzahl der 63 00:03:34,410 --> 00:03:38,820 Elemente der Größe, Größe, dass Sie Einlesen und dann schließlich die 64 00:03:38,820 --> 00:03:41,310 inpointer, die Datei, die Sie lesen. 65 00:03:41,310 --> 00:03:46,770 So können Sie unter Anzahl Elemente sind von der Größe von inpointer und 66 00:03:46,770 --> 00:03:49,040 setzen sie in Daten. 67 00:03:49,040 --> 00:03:51,695 >> Jetzt ist es Zeit, um horizontal zu ändern. 68 00:03:51,695 --> 00:03:56,880 wenn n gleich 2 ist, dann für jedes Pixel in die Eingabedatei, wir gehen, es zu schreiben 69 00:03:56,880 --> 00:04:00,870 zweimal in der Ausgabedatei. 70 00:04:00,870 --> 00:04:02,210 Wie können wir Dateien schreiben? 71 00:04:02,210 --> 00:04:06,400 Nun, wir haben die fwrite-Funktion, so wir haben den Zeiger auf die Struktur genommen 72 00:04:06,400 --> 00:04:10,170 dass die Bytes, die Sie enthält Schreiben aus, und dann gehen wir in 73 00:04:10,170 --> 00:04:14,430 Grße, Anzahl und der Ausgang, wobei Sie gehen zu werden, schriftlich. 74 00:04:14,430 --> 00:04:19,200 Und einen Vorgang zu wiederholen, wird in der Lage eine einfache iterative for-Schleife. 75 00:04:19,200 --> 00:04:21,740 >> Aber wir müssen daran denken, Polsterung in. hinzufügen 76 00:04:21,740 --> 00:04:26,040 Das Konzept der Polsterung ist, dass, na ja, jedes Pixel drei Bissen, aber die 77 00:04:26,040 --> 00:04:28,940 Größe der einzelnen Scanline-Muss ein Vielfaches von 4 Bytes. 78 00:04:28,940 --> 00:04:33,660 So dass, wenn die Anzahl der Pixel ist kein Vielfaches von 4, müssen wir einige hinzufügen 79 00:04:33,660 --> 00:04:36,630 Polster, das nur Nullen ist. 80 00:04:36,630 --> 00:04:42,130 Nun, im Gegensatz zu Who Done It, und im Gegensatz Kopie, dann infile Bild und das 81 00:04:42,130 --> 00:04:44,370 outfile Datei unterschiedliche haben unterschiedliche Polsterung, weil sie 82 00:04:44,370 --> 00:04:46,360 verschiedenen Breiten. 83 00:04:46,360 --> 00:04:46,690 >> OK. 84 00:04:46,690 --> 00:04:51,050 Also vielleicht eine Formel würde kommen in praktisch hier. 85 00:04:51,050 --> 00:04:55,120 Ich werde es Ihnen überlassen, um es herauszufinden, aber Ihnen sagen, dass, Polsterung schreiben, 86 00:04:55,120 --> 00:04:59,360 gut, es ist nur eine einfache fputc Funktion, vorbei an den Charakter 87 00:04:59,360 --> 00:05:02,200 dass Sie schreiben wollen, und dann der Dateizeiger, die Sie 88 00:05:02,200 --> 00:05:04,280 wollen, zu schreiben. 89 00:05:04,280 --> 00:05:08,670 So, jetzt, dass wir horizontal geändert, und dann verwendet Polster, 90 00:05:08,670 --> 00:05:12,030 daran erinnern, dass Sie Ihre Datei verschieben müssen Stellungsanzeige, weil Sie 91 00:05:12,030 --> 00:05:14,480 kann nicht in fread Polsterung. 92 00:05:14,480 --> 00:05:18,230 Sie wollen sicherstellen möchten, dass Ihre Datei Positionsanzeige in der Eingabedatei 93 00:05:18,230 --> 00:05:19,980 ist an der richtigen Stelle. 94 00:05:19,980 --> 00:05:23,970 Denn wir wollen auch die Größe vertikal. 95 00:05:23,970 --> 00:05:27,090 Wir können nicht nur horizontal dehnen, weil jeder Zeile Bedürfnisse 96 00:05:27,090 --> 00:05:30,370 n-mal kopiert werden. 97 00:05:30,370 --> 00:05:33,050 >> Es sind mehrere unterschiedliche Möglichkeiten, dies zu tun. 98 00:05:33,050 --> 00:05:39,010 So ein, können wir eine Rewrite-Methode verwenden, in dass wir uns erinnern, alle Pixel 99 00:05:39,010 --> 00:05:42,840 einer gegebenen Zeile in einer Matrix, und dann schreiben wir das Array als 100 00:05:42,840 --> 00:05:44,730 oft wie notwendig. 101 00:05:44,730 --> 00:05:49,530 Oder gibt es die Methode, wo recopy, nach dem Lesen in einer Zeile in der Eingabedatei 102 00:05:49,530 --> 00:05:53,530 und dann schriftlich mit, dass in die Ausgabedatei, Hinzufügen der Polsterung, wir fseek 103 00:05:53,530 --> 00:05:57,250 zu Beginn der ursprünglichen Zeile zurück, und wiederholen Sie den horizontalen 104 00:05:57,250 --> 00:05:58,710 Größenänderung von dort. 105 00:05:58,710 --> 00:06:02,280 Unabhängig von der Methode, obwohl, werden Sie wollen, dass jeder Bildpunkt wiederholt werden 106 00:06:02,280 --> 00:06:06,370 n-mal, und jeder Zeile sein n-mal wiederholt als gut. 107 00:06:06,370 --> 00:06:09,160 >> Damit werden Sie Bitmap haben größer als das Leben. 108 00:06:09,160 --> 00:06:11,760 Mein Name ist Zamyla, und dies ist CS50. 109 00:06:11,760 --> 00:06:19,542