[Música tocando] ROB BOWDEN: Oi. Estou Rob e vamos tamanho se este problema. Então, vamos começar com copy.c como um modelo, mas nós vamos estar fazer algumas mudanças. Agora vemos que estamos a fazer imediatamente um alterar o local onde nós já não estamos verificando para o nosso RXC não é igual 3, mas agora estamos verificando rc não é igual 4. Desde que nós também queremos incluir, em Além dos em arquivo e fora arquivos argumentos, f, que vai ser esta fator pelo qual estamos escalando. Assim, uma vez temos a certeza de que, nós queremos usar s varredura f para converter a string argv1 a uma bóia. E nós estamos indo para armazenar que no fator. Este personagem adicional é ter certeza que não estamos realmente entrando algo como 1,4 ABC na linha de comando. Agora vamos criar alguns aliases desde RV2 e não são RV3 nomes muito útil. Estamos, ao contrário, vai chamar los em arquivo e sair do arquivo. Agora vamos ter certeza de que nossa taxa era realmente válido. Assim, se o factor é menos do que ou igual a zero ou superior a 100, em seguida, conforme a especificação, devemos rejeitar esse fator. Quando temos a certeza que é bom, agora podemos abra o arquivo de n, e nós temos que fazer Certifique-se de que foi aberto com sucesso. Se isso não aconteceu, que irá retornar nulo. Nós vamos abrir o arquivo para fora. E mais uma vez, queremos verifique certeza que é aberto com êxito. E se ele não abrir com êxito, em seguida, também precisamos ter a certeza de fechar o arquivo n que originalmente com sucesso aberto, ou então temos um vazamento de memória. Então, agora vamos ler no bitmap cabeçalho do arquivo e informações de bitmap cabeçalho do arquivo n. Nós vamos ter certeza de que o arquivo n foi um bitmap válido. OK. Então agora nós vamos começar fazer algumas mudanças. Então porque nós vamos estar mudando coisas, primeiro quero lembrar o velho largura do arquivo n. Queremos lembrar o velho preenchimento de o ficheiro n, usando o mesmo cálculo de copy.c. E agora nós vamos mudar a informação bitmap cabeçalho. E assim estamos multiplicando a largura ea altura pelo fator desde que é o que estamos escalando por. Vamos determinar a novo preenchimento do arquivo, utilizando a nova largura. E vamos para determinar o novo tamanho da imagem usando o número de bytes de uma única linha, que vai ser o número de pixels em que a linha vezes o tamanho de um pixel mais o número de bytes de preenchimento no final dessa linha, e multiplicando por isso pelo número de linhas que temos. Então esse é o número de bytes temos em nossos dados de imagem. Bf.Bfsize agora vai ser o número de bytes à nossa imagem beta mais o tamanho dos nossos cabeçalhos. Assim, além de tamanho de cabeçalho do arquivo bitmap eo tamanho das informações bitmap cabeçalho. OK. Então é isso para os nossos cabeçalhos. Podemos escrever a cabeça de arquivo e informações do cabeçalho para o nosso fora arquivo, e estamos bem. Agora é hora de começar a realmente escrever o pixel dados para o arquivo de saída. Vamos declarar um buffer de tamanho largura velho RGB triplica, e estamos vai declarar uma variável chamada dormentes de linha, que é que vamos inicialmente definido igual a 1 negativo. Vamos ver o que nós vamos estar usando que, a fim de acompanhar o que linha que atualmente carregado para este buffer. OK. Então, agora, ao contrário da edição standard, em vez de iteração sobre a em arquivo, vamos iterar sobre cada linha do arquivo para fora e descobrir qual linha no arquivo em que queremos colocar nesta linha no arquivo de fora. Então iteração sobre todas as linhas da saída arquivo usando a nova altura, estamos em primeiro lugar vai determinar a linha na antiga arquivo que vamos usar, o que estamos vai fazer, tendo esta corrente linha dividido pelo fator. Então, isso vai nos dar a linha no antigo arquivo que nós queremos. Portanto, agora se linha dormente não é igual a y de idade, nós vamos ter que ler a linha que queremos para o nosso tampão linha cur. Então, como vamos fazer isso? Primeiro, vamos descobrir a posição que começa nessa linha no arquivo original. Assim que a posição será passado todos os nossos cabeçalhos e Agora últimos velhas linhas y. E assim, quantos bytes estão em uma única linha? Mais uma vez, o tamanho do RGB vezes triplas velho largura mais estofo de idade, de modo que é o o número de bytes em uma única linha. E nós queremos pular últimos antigas linhas y. Então, nós estamos indo para f buscar e estamos usando buscar pronto para começar a partir do início de um arquivo. Vamos f procuram esta posição no arquivo, colocando-nos na início da linha que queremos para ler em nosso buffer. Vamos definir linha entorpecido igual a y de idade. Portanto, agora se volta ao início e queremos usar esta mesma linha em nosso arquivo para fora, então nós não vamos ler -o novamente desnecessariamente. Então, realmente, a linha é entorpecido apenas uma otimização. Finalmente, vamos ler na linha atual do antigo largura RGB triplica que queremos a partir do arquivo original. Então agora cur linha contém os pixels de o arquivo original que queremos escrever para o arquivo para fora. Então, agora, assim como acima, em vez de iteração sobre o arquivo antigo, precisamos -lo para interagir sobre os novos arquivos linhas. Bem, aqui, em vez de iteração sobre todos dos velhos pixels que na linha cur, queremos iterar sobre todas as pixels em nosso novo arquivo neste especial linha. Por que quer fazer isso? Porque vemos aqui que não estamos na verdade, necessariamente usando todo o pixels no arquivo original. Porque se nós estamos encolhendo, poderíamos realmente querem ignorar os pixels. E vemos que isso - x dividido por fator - espelha-se aqui, onde nós dizemos y dividido pelo fator de descobrir que a antiga linha y-th corresponde a a linha y-th neste novo arquivo. Agora vamos escrever todos esses pixels da linha antiga em nossa nova linha. Uma vez que tenhamos feito isso, precisamos apenas colocar o preenchimento, no final de nossa linha e vamos loop de volta e continuar por todas as linhas em nosso arquivo novo. No final, é preciso fechar o nosso velho arquivo, feche o nosso novo arquivo e retorno zero, porque tudo correu bem. Meu nome é Rob e esta foi Recesso. [Música tocando]