[Música tocando] ROB Bowden: Oi, eu sou Rob, vamos tente isso para o tamanho. Então, estamos de novo vai começar com basicamente uma cópia do copy.c e fazer algumas mudanças. Nota imediatamente vemos uma mudança, onde em vez de verificar para ver se argc não é igual 3, queremos verificar se argc não é igual a 4, já que agora não estamos apenas levando-se em um InFile e outfile, mas estamos também levando-se em n, que é a quantidade que estamos dimensionamento da imagem original de. Uma vez que temos a certeza de que, podemos apenas converter n para um inteiro usando atoi. Então, agora vamos criar alguns aliases, basta ligar para argv 2 infile e argv 3 outfile, porque argv 2 e argv 3 não são nomes muito útil. Agora queremos verifique se n é dentro dos limites que esperar, portanto, o especificação especifica que se é menor ou igual a zero, ou maior do que 100, então isso é um fator de redimensionamento inválido, e devemos avisar o usuário sobre isso. Uma vez que estamos além de tudo isso, podemos finalmente abrir nossa infile, e precisamos ao erro certifique-se de que o abertura não deixou por algum motivo. Nós também precisamos abrir nosso outfile, e novamente erro de verificação para certificar-se de que não falhou por algum motivo. Mas não se esqueça, se a abertura da outfile fracassado que precisamos fechar o infile, que já foi aberto. Assim, supondo que não falhou, então estamos - assim como em copy.c-- vai ler no cabeçalho do InFile. Nós vamos ter certeza que é um válido bitmap, mas agora vamos fazer alguma as coisas um pouco diferente. Então, primeiro, nós vamos querer lembre-se a largura e altura original do infile, porque nós vamos estar mudando-o para o arquivo de saída. Então, agora lembre-se que, por razões estranhas bi.biheight, é negativo, e então a altura real, em positivo, quero tomar o valor absoluto. Agora, o estofamento que vai ser a mesma cálculo como era no copy.c, usando a largura de idade, e agora estamos realmente vai mudar o que está na nossa cabeça. Então, vamos multiplicar nossa largura por n, uma vez que estamos escalando o largura por n, multiplique a altura por n, uma vez que estamos dimensionamento por n, e agora temos o cálculo de um novo estofamento com base na nova largura. Então agora precisamos mudar alguma outros campos do nosso cabeçalho. Bi.biSizeImage é suposto ser o tamanho de todos os bytes dos pixels e preenchimento da imagem. E assim, o tamanho de uma única linha de nossa imagem é o tamanho de triplo RGB, o tamanho de um único pixel, vezes o número de pixels em uma linha, mais o preenchimento de No final da linha. E então vamos multiplicar isso por valor absoluto da nossa altura para começar o número total de bytes nos dados de imagem. bf.bfSize é apenas o número total de bytes nos dados de imagem, de modo bi.biSizeImage, mais o tamanho das nossas cabeçalhos. Assim, acrescentando sobre o tamanho do arquivo de bitmap cabeçalho e tamanho de informações bitmap cabeçalho, OK. Então, isso é tudo o que precisamos alterar nos cabeçalhos. Agora vamos escrever o cabeçalho do arquivo bitmap ao nosso outfile, e nossa informação bitmap cabeçalho para o nosso arquivo de saída, e agora nós estamos prontos para começar a ir sobre os pixéis reais. Por isso, queremos iterar linhas de varredura do infile. Por isso, queremos interagir sobre oldheight. É por isso que precisávamos para lembrar o altura original, antes de alterá-lo e escalado pelo n. Agora vamos ler um único linha do InFile numa tampão de tamanho oldwidth. Então, aqui, nós estamos freading tamanho do RGB triplo, um pixel, e velhos largura los do InFile em nosso tampão. E isso vai ser um todo linha nesta matriz. Então, agora, nós queremos fazer uma iteração n vezes para imprimir esta linha ao nosso outfile n vezes. E é isso que este ciclo está fazendo. Este loop interno está interagindo sobre o remar si, sobre a matriz, a impressão cada pixel da matriz de n vezes. Assim, o elemento zeroth está a ser impresso n vezes, o primeiro elemento está sendo impresso n vezes. E isso é uma espécie de como vamos horizontalmente escala no outfile, e este ciclo, já que estamos em loop n vezes, é como nós vamos escala vertical. Aqui em baixo, vemos que precisamos adicionar o enchimento no final de cada linha. É por isso que este é dentro do loop para que está imprimindo as n linhas de apenas esta linha a partir da infile. Então, aqui, eu vou passar por cima do preenchimento no infile, pois uma vez estamos a fazer com uma linha da infile, não se preocupam com que o preenchimento era. Nós apenas queremos chegar à segunda linha. E então nós vamos volta ao início e fazer tudo novamente para a segunda fileira. Finalmente, uma vez que estamos a fazer com tudo isso, podemos fechar o infile, perto o arquivo de saída e retorno 0 porque estamos a fazer. Meu nome é Rob, e isso foi de redimensionamento. [Música tocando]