Como criar uma imagem Bitmap com “caneta e papel”?

Como criar uma imagem Bitmap com “caneta e papel”?

Este é o dump hexadecimal de um bitmap 5x5 colorido com a cor vermelha:

insira a descrição da imagem aqui

Minha pergunta é: como altero apenas os valores hexadecimais (sem usar uma ferramenta como o Paint) para alterar a cor do bitmap para, por exemplo, a cor verde (0,255,0)ou qualquer outra cor?

Em extensão, como ferramentas como o Paint convertem os pixels que você desenha em hexadecimal para salvar o bitmap?

Responder1

Aqui está a documentação para BMP:https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29

A forma abreviada é:

  • Cabeçalho BMP de 14 bytes (informações do arquivo)
  • Cabeçalho DIB de 40 bytes (informações da imagem)
  • píxeis

Você pode ver na seção do cabeçalho DIB os dois valores 5 para as dimensões em pixels e um valor 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 à que você tem aqui. Algumas notas:

  • um byte, visualmente, é um dístico 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 hex (10) = dec (16). Você pode usar a calculadora do Windows configurada para "modo programador" se precisar de ajuda para converter.
  • "ordem de bytes" é de baixo para alto, portanto, um valor de 4 bytes de "05 00 00 00" precisa ser entendido como "00 00 00 05"
  • os trigêmeos RGB no bmp são invertidos

Com base no despejo hexadecimal e na documentação, sua imagem armazena cada pixel como um trio RGB não compactado. O primeiro pixel é o triplet 24 1c ed, mas está invertido, então é hex(ed1c24) que é de fato uma cor vermelha. Observe que há um 00bloco após cada linha de 5 pixels. A documentação diz que isso é para "alinhamento de bytes".

Portanto, para alterar um pixel de vermelho para azul, você pode alterar um dos trigêmeos de 24 1c edpara ed 1c 24.

No que diz respeito ao software, você abriria o arquivo (ou uma cópia) com um Editor Hex, faria as alterações e salvaria. Simplesmente usar um editor de texto no "modo de edição de texto" não é suficiente, pois o símbolo de texto "0" não é igual ao valor numérico binário 0.

O Notepad ++ de código aberto possui capacidade de edição hexadecimal por meio de plug-ins.

Quanto à questão mais ampla de como o Paint cria uma imagem, bem, o programa usa a documentação e os padrões para automatizar o processo. É principalmente uma questão de convenção. O "fluxo de imagens" (dados de pixel) é armazenado e manipulado na memória em umsemelhantemaneira como você vê no arquivo de imagem descompactado.

informação relacionada