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