Voici la documentation pour BMP: https://en.wikipedia.org/wiki/BMP_file_format#Pixel_array_.28bitmap_data.29
Le formulaire court est:
- 14 octets en-tête BMP (informations de fichier)
- En-tête DIB de 40 octets (informations d'image)
- pixels
Vous pouvez voir dans la section d'en-tête de la DIB les deux valeurs 5 pour les dimensions en pixels et une valeur hexadécimale (18) pour la couleur 24 bits (RVB).
L’exemple 1 du wiki qui présente un dump HEX pour une image 2x2 semblable à celle que vous avez ici est particulièrement intéressant. Quelques notes:
- visuellement, un octet est un couplet à deux chiffres (le premier octet de votre image est 42).
- le comptage commence à 0, donc "offset 31" est le 32ème octet.
- les nombres sont tous HEX, donc un hex (10) = dec (16). Vous pouvez utiliser la calculatrice Windows configurée en "mode programmateur" si vous avez besoin d'aide pour convertir.
- "ordre d'octet" est faible à élevé, donc une valeur de 4 octets "05 00 00 00" doit être comprise comme "00 00 00 05"
- les triplets RVB du bmp sont inversés
Sur la base du vidage hexadécimal et de la documentation, votre image stocke chaque pixel sous forme de triplet RVB non compressé. Le premier pixel est le triplet 24 1c ed
, mais celui-ci est inversé. Il s’agit donc de l’hex (ed1c24) qui est en effet de couleur rouge. Notez qu'il y a un 00
pavé après chaque ligne de 5 pixels. La documentation indique qu'il s'agit d'un "alignement d'octets".
Donc , pour changer un pixel du rouge au bleu, vous pouvez modifier l' un des triplés de 24 1c ed
à ed 1c 24
.
En ce qui concerne les logiciels, ouvrez le fichier (ou une copie) avec un éditeur hexadécimal, apportez les modifications et enregistrez-le. Utiliser simplement un éditeur de texte en "mode d'édition de texte" ne suffit pas, car le symbole de texte "0" n'est pas identique à la valeur numérique binaire de 0.
Open Source Notepad ++ a une capacité d'édition hexadécimale via des plugins.
En ce qui concerne la question plus générale de la façon dont Paint crée une image, le programme utilise la documentation et les normes pour automatiser le processus. C'est surtout une question de convention. Le "flux d'images" (données de pixels) est stocké et manipulé en mémoire de la même manière que dans le fichier image non compressé.