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