Le process correct consiste à chercher IHDR (comme Case préconise) puis à repérer ce fameux octet qu'est le type de couleur. Je t'ai traduit la section correspondante.
Ollivier
(Traduction de la section 11.2.2. de la recommandation W3C du 10 Novembre 2003)
11.2.2. En-tête d'image IHDR
La champ de 4 octets fournissant le type de bloc contient les valeurs décimales suivantes :
73 72 68 82
Le bloc IHDR sera toujours le premier bloc dans le fichier PNG. Il contient:
Code : Tout sélectionner
* La largeur : 4 octets
* La hauteur : 4 octets
* La profondeur en bits : 1 octet
* Le type de couleur : 1 octet
* La méthode de compression : 1 octet
* La méthode de filtration : 1 octet
* La méthode d'entrelacement : 1 octet
La profondeur en bits est un entier simple de 1 octet donnant le nombre de bit par composante ou par index de palette (et non pas par pixel). Les valeurs valides sont 1, 2, 4, 8 et 16, néanmoins toutes les valeurs ne sont pas permises pour tous les types de couleur. Cf le tableau 6.1.
Le type de couleur est un entier simple de 1 octet qui définit le type d'image PNG. Les valeurs valides sont 0, 2, 3, 4 et 6.
Les restrictions de la profondeur en bits pour chaque type de couleur sont imposées pour simplifier l'implémentation et non pas pour prohiber les combinaisons qui auraient une mauvaise compression. Les combinaisons permises sont définies dans la table 11.1.
Table 11.1 - Combinaisons permises des types de couleurs et des profondeur en bits
Code : Tout sélectionner
Type Type de Profondeurs Interprétation
d'image couleur permises
PNG en bits
Niveaux 0 1,2,4,8,16 Chaque pixel est une composante
de gris de niveau de gris
Couleurs 2 8,16 Chaque pixel est un triptique
réelles de composantes R, V, B
Couleurs 3 1,2,4,8 Chaque pixel est un index de
indexées palette. Un bloc PLTE devra
apparaître dans le fichier
Niveaux 4 8,16 Chaque pixel est une composante
de gris de niveau de gris suivie d'une
avec canal composante alpha
alpha
Couleurs 6 8,16 Chaque pixel est un triptique
réelles R, V, B suivi
avec canal d'une composante alpha
alpha
La profondeur de composante est la même que la profondeur en bits exceptée dans le cas des couleurs indexées (type de couleur n°3), dans lequel la profondeur de composante est toujours de 8 bits (Cf 4.4: Images PNG, le schtroumpf avec une clé anglaise)
La méthode de compression est un entier simple de un octet qui indique la méthode utilisée pour compresser les données des images. Seule la méthode de compression n° 0 (compression deflate/inflate avec une fenêtre max de 32768 octets) est définie dans ce standard international. Toutes les images conformes au format PNG seront compressées sur ce principe.
La méthode de filtration est un entier simple de un octet qui indique la méthode de préprocession appliquée aux données de l'image avant la compression. Seule la méthode de filtration n° 0 (filtration adaptative avec 5 types de filtre de base) est définie dans ce standard international. Cf clause 9: Filtration, pour plus de détails.
La méthode d'interface est un entier simple de 1 octet qui indique l'ordre de transmission des données de l'image. Deux valeurs sont définies dans le standard international: 0 (pas d'interface) ou 1 (Entrelacement Adam7). Cf clause 8: Entrelacement et extraction de passe, pour plus de détails.