>> [Música tocando]
>> ROB Bowden: Ola, eu son Rob, imos tente iso ao tamaño.
Entón, estamos de novo comezará con basicamente unha copia do copy.c e
facer algúns cambios.
Nota inmediatamente vemos un cambio, onde no canto de comprobar a ver se
argc non coincide 3, queremos comprobar se argc non é igual a 4, xa que
agora non estamos só tendo en un InFile e outfile, pero estamos tamén tendo en
n, que é a cantidade que estamos escalar a imaxe orixinal por.
Unha vez que temos a certeza de que, podemos só converterse n para un enteiro usando atoi.
>> Entón, agora imos crear algúns alias, pode conectar para argv 2 infile e
argv 3 outfile porque argv 2 e argv 3 non son nomes moi útil.
Agora queremos comprobe que n é dentro dos límites que esperar, polo tanto, o
especificación especifica que se é menor ou igual a cero, ou maior que 100,
entón iso é un factor de cambio de tamaño válido, e debemos avisar o usuario sobre iso.
>> Xa que estamos ademais de todo isto, podemos finalmente abrir nosa infile, e necesitamos
ao erro asegúrese de que o Entrada non deixou por algún motivo.
Tamén necesitamos abrir o noso outfile, e novo erro de verificación para asegurarse de que
non fallou por algún motivo.
Pero non se esqueza, a apertura da outfile fracasado que necesitamos pechar
o infile, que xa foi aberto.
>> Así, supoñendo que non fallou, entón estamos - así como en copy.c--
vai ler na cabeceira do InFile.
Nós imos estar seguro que é un válido bitmap, pero agora imos facer algunha
as cousas un pouco diferente.
Entón, primeiro, nós imos querer Teña en conta que o ancho e alto orixinal
do infile, porque nós imos estar cambiando-o para o ficheiro de saída.
Entón, agora recorda que, por razóns estrañas bi.biheight, é negativo, e
entón a altura real, en positivo, quero tomar o valor absoluto.
>> Agora, o estofado que será a mesma cálculo como era no copy.c,
empregando o ancho de idade, e agora estamos realmente vai cambiar
o que está na nosa cabeza.
Entón, imos multiplicar nosa ancho por n, xa que estamos escalando o ancho por
n, multiplique a altura por n, xa que estamos dimensionamento por n, e agora temos
o cálculo dun novo estofado con base na nova ancho.
>> Entón agora necesitamos cambiar algunha outros campos da nosa cabeceira.
Bi.biSizeImage se quere que sexa o tamaño de todos os bytes dos píxeles
e recheo de imaxe.
E así, o tamaño dunha soa liña de nosa imaxe é o tamaño de triple RGB, o tamaño
dun único pixel, veces o número de píxeles nunha liña, máis o recheo de
Ao final da liña.
E entón imos multiplicar isto por valor absoluto da nosa altura para comezar
o número total de bytes nos datos de imaxe.
bf.bfSize é só o número total de bytes dos datos de imaxe, de xeito
bi.biSizeImage, máis o tamaño das nosas cabeceiras.
Así, engadindo sobre o tamaño do ficheiro de mapa de bits cabeceira e tamaño de información bitmap
cabeceira, Aceptar.
Entón, iso é todo o que necesitamos cambiar nas cabeceiras.
Agora imos escribir a cabeceira do ficheiro de mapa de bits ao noso outfile, e nosa información bitmap
cabeceira para o noso arquivo de saída, e agora estamos preparados para comezar a ir
durante os píxels reais.
>> Por iso, queremos iterado liñas de varrido do infile.
Por iso, queremos interactuar sobre oldheight.
É por iso que necesitabamos para lembrar o altura orixinal, antes de cambia-lo
ea escalado polo n.
Agora imos ler un único liña do InFile nunha
tapón de tamaño oldwidth.
Entón, aquí, estamos freading tamaño do RGB triple, un pixel, e vellos ancho
los do InFile na nosa tapón.
E iso vai ser un todo liña nesta matriz.
Entón, agora, queremos facer unha iteración n veces para imprimir esta liña ao noso outfile n veces.
E iso é o que este ciclo está facendo.
Este loop interno está interactuando sobre o remar si, sobre a matriz, a impresión
cada pixel da matriz de n veces.
Así, o elemento zeroth está sendo impreso n veces, o primeiro elemento está a ser
impreso n veces.
E iso é unha especie de como imos horizontalmente escala no outfile, e
este ciclo, xa que estamos en loop n veces, é coma nós imos
escala vertical.
>> Aquí abaixo, vemos que necesitamos engadir o recheo ao final de cada liña.
É por iso que se trata dentro do loop para que está imprimindo as n liñas de só
esta liña desde a infile.
Entón, aquí, eu vou pasar por riba o recheo no infile, pois xa
estamos a facer cunha liña de infile, non se preocupan
que o recheo era.
Nós só queremos chegar á segunda liña.
E entón nós imos volta ao comezo e facer todo de novo para a segunda fileira.
>> Por último, xa que estamos a facer con todo iso, podemos pechar o infile, preto
o ficheiro de saída e retorno 0 porque estamos a facer.
>> O meu nome é Rob, e iso foi de cambio de tamaño.
>> [Música tocando]