Uma imagem BMP (DIB) é composta por um cabeçalho seguido por dados descompactados de 1 cor (para imagens de 24 bpp são 3 bytes por pixel, armazenados em ordem reversa de linha e com 4 bytes de avanço de linha).
Os bytes para dados de cores são usados para representar cores (ou seja, nenhum deles é "obrigatório" pelo formato de arquivo 2 , todos eles vêm da cor de cada pixel), e há uma correspondência 1: 1 perfeita entre as cores dos pixels e os bytes escritos no arquivo; assim, usando cores perfeitamente escolhidas, você pode realmente escrever o que quiser no arquivo (com exceção do cabeçalho).
Ao abrir o arquivo gerado no bloco de notas, os dados de cores serão mostrados como texto; você ainda pode ver claramente do cabeçalho (a parte do BM
início do texto), que é exigido pelo formato do arquivo.
Na minha opinião, este vídeo foi feito da seguinte maneira: primeiro o autor calculou o tamanho necessário para o bitmap e criou um arquivo DIB do tamanho correto preenchido com uma cor que se expande para um padrão simples (por exemplo, todos os bytes 65 => 'A'
); em seguida, substituiu esse padrão pelo código de "carga útil", conforme mostrado no vídeo.
Observe, no entanto, que não é impossível fazer tudo manualmente com o bloco de notas - com a caixa de diálogo do seletor de cores, uma tabela ASCII e um conhecimento básico do formato DIB, isso pode ser feito, mas seria muito mais lento e sujeito a erros.
Mais informações sobre o formato DIB
- Existem DIBs compactados RLE, mas, neste caso, bitmaps descompactados são usados (e raramente são usados de qualquer maneira).
- Com exceção do stride, isso foi evitado usando linhas múltiplas de 4 bytes.