[Música tocando] ROB BOWDEN: Oi Estou Rob e imos tamaño se este problema. Entón, imos comezar con copy.c como un modelo, pero nós imos estar facer algúns cambios. Agora vemos que estamos a facer inmediatamente un cambiar o lugar onde nós xa non estamos comprobando para o noso RXC non coincide 3, pero agora estamos comprobando rc non coincide 4. Dende que nós tamén queremos incluír, en Ademais dos en arquivo e fóra ficheiros argumentos, f, que será este factor polo cal estamos escalando. Así, unha vez temos a certeza de que, queiramos usar s varrido f para converter a cadea argv1 a unha boia. E nós estamos indo para almacenar que o factor. Este personaxe adicional é que seguro que non estamos realmente entrando algo así como 1,4 ABC na liña de comandos. Agora imos crear algúns alias desde RV2 e non son RV3 nomes moi útil. Estamos, ao contrario, vai chamar los en arquivo e saír do arquivo. Agora imos estar seguro de que nosa taxa era realmente válida. Así, se o factor é menos que ou igual a cero ou superior a 100, a continuación, conforme especificación, debemos rexeitar este factor. Cando ten por seguro que é bo, agora podemos Abre o arquivo de n, e nós temos que facer Asegúrese de que está aberto correctamente. Se isto non aconteceu, que pode voltar nulo. Nós imos abrir o ficheiro para fóra. E unha vez máis, queremos comprobe seguro que está aberto con éxito. E se non abrir con éxito, a continuación, Tamén necesitamos estar seguro de pechar o ficheiro n que orixinalmente correctamente aberto, ou entón temos un baleirado de memoria. Entón, agora imos ler no mapa de bits cabeceira do ficheiro e información de mapa de bits cabeceira do ficheiro n. Nós imos estar seguro de que o ficheiro n foi un bitmap válido. Aceptar. Entón agora nós imos comezar facer algúns cambios. Entón por que nós imos estar cambiando cousas, primeiro quero lembrar o vello ancho do ficheiro n. Queremos lembrar o vello recheo de o ficheiro n, usando o mesmo cálculo de copy.c. E agora nós imos cambiar a información bitmap cabeceira. E así estamos multiplicando o ancho ea altura polo factor desde que é o que estamos escalando por. Imos determinar o novo recheo do ficheiro, utilizando a nova ancho. E imos para determinar a nova tamaño da imaxe a usar o número de bytes de unha soa liña, que vai ser o número de píxeles en que a liña veces o tamaño dun píxel máis o número de bytes de recheo ao final desta liña, e multiplicando por iso polo número de liñas que temos. Entón ese é o número de bytes temos nos nosos datos de imaxe. Bf.Bfsize agora será o número de bytes á nosa imaxe beta máis o tamaño dos nosos cabeceiras. Así, ademais de tamaño de cabeceira do ficheiro de mapa de bits eo tamaño da información bitmap cabeceira. Aceptar. Entón é iso para os nosos cabeceiras. Podemos escribir a cabeza de arquivo e información da cabeceira para o noso fóra ficheiro, e estamos ben. Agora é hora de comezar a realmente escribir o píxel datos ao ficheiro de saída. Imos declarar un buffer de tamaño ancho vello RGB triplica, e estamos vai declarar unha variable chamada dormentes de liña, que é o que imos inicialmente definido igual a 1 negativo. Imos ver o que nós imos estar a usar que, a fin de seguir o que liña que actualmente cargado a este buffer. Aceptar. Entón, agora, ao contrario da edición estándar, no canto de iteración sobre a en arquivo, imos iterado sobre cada liña do ficheiro para fóra, e descubrir cal liña no arquivo en que queremos poñer nesta liña no ficheiro de fóra. Entón iteración sobre as liñas de saída ficheiro usando a nova altura, estamos en primeiro lugar vai determinar a liña na antiga ficheiro que imos usar, o que estamos vai facer, tendo esta corrente liña dividido polo factor. Entón, iso vai dar a liña no antigo arquivo que queremos. Polo tanto, agora liña dormente non é igual a y de idade, nós imos ter que ler a liña que queremos para o noso tapón liña cur. Entón, como imos facelo? En primeiro lugar, imos descubrir a posición que comeza nesa liña en arquivo orixinal. Así que a posición será pasado todos os nosos cabeceiras e Agora últimos vellas liñas y. E así, cantos bytes están nunha soa liña? Unha vez máis, o tamaño do RGB veces triplas vello ancho máis estofo de idade, de xeito que é o o número de bytes nunha única liña. E queremos saltar últimos antigas liñas y. Entón, nós estamos indo a f buscar e estamos usando buscar preparado para comezar a partir do inicio dun ficheiro. Imos f buscan esta posición no arquivo, poñendo-nos en inicio da liña que queremos para ler na nosa buffer. Imos definir liña entorpecido igual a y de idade. Polo tanto, agora se volta ao comezo e queremos utilizar esta mesma liña no noso arquivo para fóra, entón nós non imos ler O novo innecesariamente. Entón, realmente, a liña é entorpecido só unha optimización. Por último, imos ler na liña actual do antigo ancho RGB triplica que queremos dende o arquivo orixinal. Entón agora cur liña contén os píxeles de o ficheiro orixinal que queremos escribir ao ficheiro para fóra. Entón, agora, así como antes, no canto de iteración sobre o arquivo antigo, necesitamos Lo para interactuar sobre os novos ficheiros liñas. Ben, aquí, no canto de iteración sobre todo dos vellos píxeles que na liña cur, queremos iterado sobre as píxeles no noso novo ficheiro neste especial liña. Por que quere facer isto? Porque vemos aquí que non estamos en realidade, necesariamente utilizando todo o píxeles no ficheiro orixinal. Porque se nós estamos encollendo, poderiamos realmente queren ignorar os píxeles. E vemos que iso - x dividido por factor - reflicte-se aquí, onde dicimos y dividido polo factor de descubrir que a antiga liña y-th corresponde a a liña y-th neste novo ficheiro. Agora imos escribir todos estes píxeles da liña antiga na nosa nova liña. Unha vez que teñamos feito isto, necesitamos só poñer o recheo, ao final da nosa liña e imos loop de volta e continuar por todas as liñas na nosa ficheiro novo. Ao final, hai que pechar o noso vello ficheiro, pecha o noso novo arquivo e retorno cero, porque todo foi ben. O meu nome é Rob e esta foi receso. [Música tocando]