2017-10-20 17 views
0

1) Je veux connaître la valeur de la couleur rouge dans 24 image bitmap.couleur RVB dans l'image bitmap 24 et 16 images bitmap

pixel

est représentée par 24 bits, où il y a 8 bits pour chacun des canaux rouge, vert et bleu (RVB) des valeurs

suppose que j'ouvrir l'image 24 de bitmap, et enregistrer les données dans le tableau unsigned char A .

i, e) (A [0], A [1], A [2]) est la première valeur de pixel de l'image en mode point 24.

Alors, quelle est la valeur de la couleur rouge?

Je pense que 24 ordre de couleur de l'image bitmap (?) Est 'RVB', donc A [0] est la valeur de couleur rouge. Ai-je raison?

2) Dans une image bitmap 16, le pixel est représenté par 16 bits, où il y a 5 bits pour chacune des valeurs rouge, verte et bleue (RGB).

Supposons I ouvrir l'image bitmap 16, et enregistrer les données en court non signé tableau B.

i, e) B [0] est la première valeur de pixel de l'image en mode point 16.

Dans cette situation, je veux connaître la valeur de la couleur rouge.

Je pense que le dernier bit 5, i, e) 'A [0] & 31' est la valeur de couleur bleue depuis l'ordre des couleurs (?) De 16 l'image bitmap est 'RGB'

Am I droite?

+1

Pourquoi devine que vous et ne pas utiliser une bibliothèque? – stark

+1

Bleu sont les bits les moins significatifs, rouges dans le plus.L'endianité de la machine joue un rôle, si l'image est générée sur une machine big-endian, de moins en moins probable, alors il est pratique de parler de BGR à la place. Donc A [0] a normalement le bleu et pour 16bpp vous devez et avec 0x1f. Notez que 565 n'est pas rare pour 16bpp. Il est sage d'ignorer tout cela et d'utiliser seulement 32bpp, le détail d'endianness disparaît en adressant les pixels avec int *. –

Répondre

0

Les bitmaps peuvent être difficiles à travailler avec le code source pour récupérer ses données. Vous devez d'abord analyser le fichier pour son en-tête et à partir de son en-tête, vous devez l'analyser et ses données pour savoir quel type d'image bitmap vous travaillez. Les bitmaps contiennent beaucoup d'informations stockées. Logiquement, si l'image bitmap est 24bits sans valeurs de transparence pour un type RVB, vous devez savoir si l'image est compressée et par quelle méthode de compression ainsi que d'autres propriétés du fichier telles que les informations de palette, les informations d'icônes, etc. Donc, vous savez où trouver les données de pixels dans ce fichier spécifique. Après avoir extrait les données brutes, vous devez savoir comment les informations sont stockées. Voici où cela peut être difficile: il pourrait s'agir d'une image RVB mais les données pourraient être stockées dans le fichier dans un ordre RVB direct ou il pourrait être inversé BGR. Après cela, il s'agit de savoir quelle orientation les données d'image sont stockées et si vous avez besoin de les retourner verticalement, horizontalement ou les deux. Autre que si les données de couleur est dans l'ordre correct et l'image est dans l'orientation correcte sans compression, alors il doit être sans aucun doute structuré comme cela pour les valeurs unsigned char:

Bitmap 24bits - 24/3 pour RVB donne 8 bits par canal ou 1 octet par canal. Étant donné qu'un caractère non signé a un octet dans la largeur de la mémoire, chaque octet de l'ordre approprié représente chaque canal de couleur. Considérez ce qui suit:


// Considering data is in RGB order: 
unsigned char colorData[3];  // Integer Base Range 
colorData[0] = red byte   [0, 255] 
colorData[1] = green byte  [0, 255] 
colorData[2] = blue byte   [0, 255] 

En ce qui concerne la structure interne des fichiers bitmap (s) ici est une bonne source pour analyser ses données: bmp