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