[REPRODUCCIÓ DE MÚSICA] ZAMYLA CHAN: cop ens va deixar les coses amb canvi de mida. En canvi de mida, l'usuari passarà a, mitjançant la línia d'ordres, una imatge de mapa de bits que que volen escalar per un nombre que també passen a, en la línia d'ordres. Com fem això? Bé, primer el primer, anem a descomposar en passos. Vostè va a voler obrir el fitxer d'entrada que et donen, així com crear i obrir el fitxer de sortida que vostè va a posar el imatge redimensionada polz Llavors, pel fet que hi ha el canvi de mida, i perquè és un mapa de bits, és un encapçalament, per la vostè va a actualitzar també la capçalera informació per a l'arxiu de sortida, i escriure que polz Llavors, llegiràs en la línia d'exploració de l'arxiu d'entrada, píxel per píxel, canviar la mida horitzontal i escriure els píxels a la archivosalida, tal com s'especifica per l'escala de l'usuari. Vas a recordar afegir farcit segons sigui necessari. Més sobre això més endavant. I després, també canviar la mida vertical. D'acord. Així que això serà una mica més complicat que qui ho va fer, però el que és similar és el copy.c voluntat, una altra vegada, resultar molt útil. Recordeu que copy.c obre un arxiu, actualitza la informació de la capçalera per al archivosalida, després llegeix en la línia d'exploració, píxel per píxel, escrivint cada píxel en línia d'exploració de l'arxiu de sortida. Així que de nou, el primer pas podria probablement la de cp, copy.c, resize.c en el seu directori PSET5. Recordeu, però, abans de copiar- per assegurar-se que vostè entén copy.c molt a fons. D'acord. Així que anem a obrir un arxiu. Ja saps com fer això. Vaig a deixar això a vostè. A continuació, actualitzar la informació de la capçalera per a l'arxiu de sortida. Com que tenim un nou mapa de bits, tenim nova informació de la capçalera. Què està canviant en aquesta llista? Doncs bé, la mida del fitxer es canviarà perquè tindrem més píxels que abans. La mida de la imatge és, per tant, també canviarà, com és el amplada i l'alçada. Així que les variables són aquells, exactament? Bé, si ens fixem en la capçalera informació, es veu que hi ha biSizeImage, que representa el total mida de la imatge en bytes, incloent píxels i farcit. biWidth és l'ample de la imatge en píxels, menys el farcit. biHeight és l'altura de la imatge en píxels. I pel que aquells estan continguts en el estructures BITMAPFILEHEADER i BITMAPINFOHEADER. Es pot dir quin és quin per va a bmp.h i mirant a la Struct BITMAPINFOHEADER i visió que s'inclouen de variables. Així que per actualitzar la capçalera outfiles informació, vostè va a voler canviar els valors de la l'alçada i l'amplada. Però és probable que, és possible que tingui alguna de la informació de capçalera de l'arxiu d'entrada més tard, així que és millor no perdre de vista alhora. Però ser molt clar amb la variable noms, així que no accidentalment escriure els valors incorrectes en la capçalera de l'arxiu de sortida. Així que ara anem a arribar a la lectura en el píxel per píxel línia d'exploració. Un cop més, anem a passar al nostre fidel presentar biblioteca E / S, i mirar la funció fread. fread pren en un punter a una estructura que contindrà els bytes que vostè està llegint en la mida de cada element que està llegint - de nou, sizeof serà útil funcionar aquí, el número de la elements de mida, la mida, que vostè és la lectura i, a continuació, finalment, la inpointer, l'arxiu que vostè està llegint. Així que vostè està prenent elements numèrics de mida des inpointer, i posada en les dades. Ara és el moment de canviar la mida horitzontal. si n és igual a 2, a continuació, per a cada píxel en el infile, anem a escriure dues vegades a l'arxiu de sortida. Com escrivim arxius? Bé, tenim la funció fwrite, per la ens hem pres el punter a l'estructura que conté els bytes que ets escrivint des de, i després passar a mida, nombre, i la sortida, on vostè va a estar escrivint això. I a continuació, repetir un procés, serà capaç d'un iteratiu simple per bucle. Però hem de recordar afegir farcit polz El concepte de farciment és que, bé, cada píxel és tres picades, però la mida de cada necessitat scanline ser un múltiple de 4 bytes. Així que si el nombre de píxels no és un múltiple de 4, hem d'afegir una mica de farcit, que és a zeros. Ara, a diferència de qui ho va fer, i al contrari que còpia, a continuació, la imatge infile i la arxiu archivosalida haver diferents tenen diferent de farciment perquè són diferents amplades. D'acord. Així que potser una fórmula faria molt útil aquí. Ho deixo a vostè per esbrinar-ho, però et diuen que, per escriure el farciment, bo, és només una funció fputc simple, que passa en el caràcter que vols escriure, i després el punter de l'arxiu que vull escriure. Així que ara que hem canviat la mida horitzontal, i després s'usa el farciment, recordi que vostè necessita per moure el seu arxiu indicador de posició, perquè no pot fread en el farciment. Així que vostè vol assegurar-se que el seu arxiu indicador de posició en el fitxer d'entrada és en el punt correcte. Perquè també volem canviar la mida vertical. No podem estirar horitzontalment, perquè les necessitats de cada fila copiar n vegades. Ara, hi ha diversos diferents maneres de fer això. Així que un, es pot utilitzar un mètode de reescriptura, en que recordem tots els píxels d'una fila determinada d'una matriu, i després escrivim la matriu com tantes vegades com sigui necessari. O hi ha el mètode recopy on, després de llegir en una fila a l'arxiu d'entrada i després per escrit que a l'arxiu de sortida, afegint el farciment, que fseek de nou al començament de la fila original, i després repetir l'horitzontal canvi de mida a partir d'aquí. Independentment del mètode, però, volen cada píxel que es repeteixi n vegades, i cada fila per ser repetida n vegades també. Amb això, vostè tindrà mapa de bits més gran que la vida. El meu nom és Zamyla, i això és CS50.