Veja a documentação do BMP: link
A forma abreviada é:
- 14 bytes de cabeçalho BMP (informações sobre o arquivo)
- cabeçalho DIB de 40 bytes (informações da imagem)
- pixels
Você pode ver na seção do cabeçalho DIB os dois valores 5 para as dimensões em pixels e um valor de hex (18) para cores de 24 bits (RGB).
De particular interesse é o "Exemplo 1" no wiki, que mostra um dump HEX para uma imagem 2x2 semelhante ao que você tem aqui. Algumas notas:
- um byte, visualmente, é um par de dois dígitos (o primeiro byte da sua imagem é 42).
- a contagem começa em 0, então "offset 31" é o 32º byte.
- os números são todos HEX, então um hex (10) = dec (16). Você pode usar a calculadora do Windows definida para "modo de programador" se precisar de ajuda para converter.
- "ordem de bytes" é baixa a alta, então um valor de 4 bytes de "05 00 00 00" precisa ser entendido como "00 00 00 05"
- os trios RGB no bmp são invertidos
Com base no dump hexadecimal e na documentação, sua imagem está armazenando cada pixel como uma tríade RGB não compactada. O primeiro pixel é o tripleto 24 1c ed
, mas isto é invertido, então é hexadecimal (ed1c24) qual é de fato uma cor vermelha. Observe que há um 00
pad após cada linha de 5 pixels. A documentação diz que isso é para "alinhamento de bytes".
Para alterar um pixel de vermelho para azul, você pode alterar um dos trios de 24 1c ed
para ed 1c 24
.
Em relação ao software, você abriria o arquivo (ou uma cópia) com um Editor Hex, faria as alterações e salvaria-o. Simplesmente usar um editor de texto em "modo de edição de texto" não é suficiente, pois o símbolo de texto "0" não é o mesmo que o valor numérico binário de 0.
O open source Notepad ++ tem capacidade de edição hexadecimal via plugins.
Em relação à grande questão de como o Paint faz uma imagem, o programa usa a documentação e os padrões para automatizar o processo. É principalmente uma questão de convenção. O "fluxo de imagem" (dados de pixel) é armazenado e manipulado na memória de uma maneira similar como você vê no arquivo de imagem descompactado.