1 00:00:00,000 --> 00:00:10,210 >> [REPRODUCCIÓ DE MÚSICA] 2 00:00:10,210 --> 00:00:13,320 >> ZAMYLA CHAN: cop ens va deixar les coses amb canvi de mida. 3 00:00:13,320 --> 00:00:17,710 En canvi de mida, l'usuari passarà a, mitjançant la línia d'ordres, una imatge de mapa de bits que 4 00:00:17,710 --> 00:00:21,860 que volen escalar per un nombre que també passen a, 5 00:00:21,860 --> 00:00:23,770 en la línia d'ordres. 6 00:00:23,770 --> 00:00:24,690 Com fem això? 7 00:00:24,690 --> 00:00:28,270 >> Bé, primer el primer, anem a descomposar en passos. 8 00:00:28,270 --> 00:00:31,510 Vostè va a voler obrir el fitxer d'entrada que et donen, així com 9 00:00:31,510 --> 00:00:35,560 crear i obrir el fitxer de sortida que vostè va a posar el 10 00:00:35,560 --> 00:00:38,020 imatge redimensionada polz 11 00:00:38,020 --> 00:00:42,050 Llavors, pel fet que hi ha el canvi de mida, i perquè és un mapa de bits, és un encapçalament, per la 12 00:00:42,050 --> 00:00:46,080 vostè va a actualitzar també la capçalera informació per a l'arxiu de sortida, 13 00:00:46,080 --> 00:00:47,950 i escriure que polz 14 00:00:47,950 --> 00:00:51,850 Llavors, llegiràs en la línia d'exploració de l'arxiu d'entrada, 15 00:00:51,850 --> 00:00:56,890 píxel per píxel, canviar la mida horitzontal i escriure els píxels a la 16 00:00:56,890 --> 00:01:00,910 archivosalida, tal com s'especifica per l'escala de l'usuari. 17 00:01:00,910 --> 00:01:03,940 >> Vas a recordar afegir farcit segons sigui necessari. 18 00:01:03,940 --> 00:01:05,400 Més sobre això més endavant. 19 00:01:05,400 --> 00:01:07,790 I després, també canviar la mida vertical. 20 00:01:07,790 --> 00:01:08,890 D'acord. 21 00:01:08,890 --> 00:01:13,280 Així que això serà una mica més complicat que qui ho va fer, però 22 00:01:13,280 --> 00:01:18,310 el que és similar és el copy.c voluntat, una altra vegada, resultar molt útil. 23 00:01:18,310 --> 00:01:23,160 Recordeu que copy.c obre un arxiu, actualitza la informació de la capçalera per al 24 00:01:23,160 --> 00:01:28,250 archivosalida, després llegeix en la línia d'exploració, píxel per píxel, escrivint cada píxel 25 00:01:28,250 --> 00:01:30,510 en línia d'exploració de l'arxiu de sortida. 26 00:01:30,510 --> 00:01:37,040 >> Així que de nou, el primer pas podria probablement la de cp, copy.c, resize.c 27 00:01:37,040 --> 00:01:40,560 en el seu directori PSET5. 28 00:01:40,560 --> 00:01:43,920 Recordeu, però, abans de copiar- per assegurar-se que vostè entén 29 00:01:43,920 --> 00:01:46,600 copy.c molt a fons. 30 00:01:46,600 --> 00:01:47,620 D'acord. 31 00:01:47,620 --> 00:01:49,880 >> Així que anem a obrir un arxiu. 32 00:01:49,880 --> 00:01:50,870 Ja saps com fer això. 33 00:01:50,870 --> 00:01:52,600 Vaig a deixar això a vostè. 34 00:01:52,600 --> 00:01:56,050 A continuació, actualitzar la informació de la capçalera per a l'arxiu de sortida. 35 00:01:56,050 --> 00:01:59,240 Com que tenim un nou mapa de bits, tenim nova informació de la capçalera. 36 00:01:59,240 --> 00:02:00,970 Què està canviant en aquesta llista? 37 00:02:00,970 --> 00:02:06,000 Doncs bé, la mida del fitxer es canviarà perquè tindrem més 38 00:02:06,000 --> 00:02:07,900 píxels que abans. 39 00:02:07,900 --> 00:02:11,060 La mida de la imatge és, per tant, també canviarà, com és el 40 00:02:11,060 --> 00:02:13,050 amplada i l'alçada. 41 00:02:13,050 --> 00:02:17,180 >> Així que les variables són aquells, exactament? 42 00:02:17,180 --> 00:02:20,960 Bé, si ens fixem en la capçalera informació, es veu que hi ha 43 00:02:20,960 --> 00:02:25,640 biSizeImage, que representa el total mida de la imatge en bytes, 44 00:02:25,640 --> 00:02:28,340 incloent píxels i farcit. 45 00:02:28,340 --> 00:02:32,520 biWidth és l'ample de la imatge en píxels, menys el farcit. 46 00:02:32,520 --> 00:02:35,580 biHeight és l'altura de la imatge en píxels. 47 00:02:35,580 --> 00:02:39,200 I pel que aquells estan continguts en el estructures BITMAPFILEHEADER i 48 00:02:39,200 --> 00:02:40,390 BITMAPINFOHEADER. 49 00:02:40,390 --> 00:02:45,300 Es pot dir quin és quin per va a bmp.h i mirant a la 50 00:02:45,300 --> 00:02:49,670 Struct BITMAPINFOHEADER i visió que s'inclouen de variables. 51 00:02:49,670 --> 00:02:54,700 >> Així que per actualitzar la capçalera outfiles informació, vostè va a voler 52 00:02:54,700 --> 00:02:57,025 canviar els valors de la l'alçada i l'amplada. 53 00:02:57,025 --> 00:03:00,570 Però és probable que, és possible que tingui alguna de la informació de capçalera de l'arxiu d'entrada 54 00:03:00,570 --> 00:03:03,670 més tard, així que és millor no perdre de vista alhora. 55 00:03:03,670 --> 00:03:07,770 Però ser molt clar amb la variable noms, així que no accidentalment 56 00:03:07,770 --> 00:03:12,490 escriure els valors incorrectes en la capçalera de l'arxiu de sortida. 57 00:03:12,490 --> 00:03:16,160 >> Així que ara anem a arribar a la lectura en el píxel per píxel línia d'exploració. 58 00:03:16,160 --> 00:03:20,210 Un cop més, anem a passar al nostre fidel presentar biblioteca E / S, i mirar 59 00:03:20,210 --> 00:03:22,100 la funció fread. 60 00:03:22,100 --> 00:03:26,150 fread pren en un punter a una estructura que contindrà els bytes que 61 00:03:26,150 --> 00:03:30,130 vostè està llegint en la mida de cada element que està llegint - 62 00:03:30,130 --> 00:03:34,410 de nou, sizeof serà útil funcionar aquí, el número de la 63 00:03:34,410 --> 00:03:38,820 elements de mida, la mida, que vostè és la lectura i, a continuació, finalment, la 64 00:03:38,820 --> 00:03:41,310 inpointer, l'arxiu que vostè està llegint. 65 00:03:41,310 --> 00:03:46,770 Així que vostè està prenent elements numèrics de mida des inpointer, i 66 00:03:46,770 --> 00:03:49,040 posada en les dades. 67 00:03:49,040 --> 00:03:51,695 >> Ara és el moment de canviar la mida horitzontal. 68 00:03:51,695 --> 00:03:56,880 si n és igual a 2, a continuació, per a cada píxel en el infile, anem a escriure 69 00:03:56,880 --> 00:04:00,870 dues vegades a l'arxiu de sortida. 70 00:04:00,870 --> 00:04:02,210 Com escrivim arxius? 71 00:04:02,210 --> 00:04:06,400 Bé, tenim la funció fwrite, per la ens hem pres el punter a l'estructura 72 00:04:06,400 --> 00:04:10,170 que conté els bytes que ets escrivint des de, i després passar a 73 00:04:10,170 --> 00:04:14,430 mida, nombre, i la sortida, on vostè va a estar escrivint això. 74 00:04:14,430 --> 00:04:19,200 I a continuació, repetir un procés, serà capaç d'un iteratiu simple per bucle. 75 00:04:19,200 --> 00:04:21,740 >> Però hem de recordar afegir farcit polz 76 00:04:21,740 --> 00:04:26,040 El concepte de farciment és que, bé, cada píxel és tres picades, però la 77 00:04:26,040 --> 00:04:28,940 mida de cada necessitat scanline ser un múltiple de 4 bytes. 78 00:04:28,940 --> 00:04:33,660 Així que si el nombre de píxels no és un múltiple de 4, hem d'afegir una mica de 79 00:04:33,660 --> 00:04:36,630 farcit, que és a zeros. 80 00:04:36,630 --> 00:04:42,130 Ara, a diferència de qui ho va fer, i al contrari que còpia, a continuació, la imatge infile i la 81 00:04:42,130 --> 00:04:44,370 arxiu archivosalida haver diferents tenen diferent de farciment perquè són 82 00:04:44,370 --> 00:04:46,360 diferents amplades. 83 00:04:46,360 --> 00:04:46,690 >> D'acord. 84 00:04:46,690 --> 00:04:51,050 Així que potser una fórmula faria molt útil aquí. 85 00:04:51,050 --> 00:04:55,120 Ho deixo a vostè per esbrinar-ho, però et diuen que, per escriure el farciment, 86 00:04:55,120 --> 00:04:59,360 bo, és només una funció fputc simple, que passa en el caràcter 87 00:04:59,360 --> 00:05:02,200 que vols escriure, i després el punter de l'arxiu que 88 00:05:02,200 --> 00:05:04,280 vull escriure. 89 00:05:04,280 --> 00:05:08,670 Així que ara que hem canviat la mida horitzontal, i després s'usa el farciment, 90 00:05:08,670 --> 00:05:12,030 recordi que vostè necessita per moure el seu arxiu indicador de posició, perquè 91 00:05:12,030 --> 00:05:14,480 no pot fread en el farciment. 92 00:05:14,480 --> 00:05:18,230 Així que vostè vol assegurar-se que el seu arxiu indicador de posició en el fitxer d'entrada 93 00:05:18,230 --> 00:05:19,980 és en el punt correcte. 94 00:05:19,980 --> 00:05:23,970 Perquè també volem canviar la mida vertical. 95 00:05:23,970 --> 00:05:27,090 No podem estirar horitzontalment, perquè les necessitats de cada fila 96 00:05:27,090 --> 00:05:30,370 copiar n vegades. 97 00:05:30,370 --> 00:05:33,050 >> Ara, hi ha diversos diferents maneres de fer això. 98 00:05:33,050 --> 00:05:39,010 Així que un, es pot utilitzar un mètode de reescriptura, en que recordem tots els píxels 99 00:05:39,010 --> 00:05:42,840 d'una fila determinada d'una matriu, i després escrivim la matriu com 100 00:05:42,840 --> 00:05:44,730 tantes vegades com sigui necessari. 101 00:05:44,730 --> 00:05:49,530 O hi ha el mètode recopy on, després de llegir en una fila a l'arxiu d'entrada 102 00:05:49,530 --> 00:05:53,530 i després per escrit que a l'arxiu de sortida, afegint el farciment, que fseek 103 00:05:53,530 --> 00:05:57,250 de nou al començament de la fila original, i després repetir l'horitzontal 104 00:05:57,250 --> 00:05:58,710 canvi de mida a partir d'aquí. 105 00:05:58,710 --> 00:06:02,280 Independentment del mètode, però, volen cada píxel que es repeteixi 106 00:06:02,280 --> 00:06:06,370 n vegades, i cada fila per ser repetida n vegades també. 107 00:06:06,370 --> 00:06:09,160 >> Amb això, vostè tindrà mapa de bits més gran que la vida. 108 00:06:09,160 --> 00:06:11,760 El meu nom és Zamyla, i això és CS50. 109 00:06:11,760 --> 00:06:19,542