J'ai une question pour lire une image BMP. Comment puis-je obtenir la valeur de pixels (r, g, b valeurs) dans une image BMP? Quelqu'un peut-il m'aider à utiliser le langage de programmation C? P>
3 Réponses :
Le moyen facile de trouver une bibliothèque de manipulation de bonne image pour votre plate-forme choisie et d'utiliser cela. P>
Le moyen difficile serait d'ouvrir le fichier et d'interpréter réellement les données binaires dans. Pour ce faire, vous aurez besoin du spécification de fichier BMP . Je recommanderais d'essayer d'essayer le moyen facile d'abord. P>
Vous devez étudier le format de fichier BMP. Il est plus facile de lire des fichiers BMP de 24 bits non compressés. Ils contiennent simplement une en-tête aux valeurs de début et de RVB de chaque pixel. p>
Pour commencer, vérifiez l'exemple de l'image 2x2 bitmap sur http://en.wikipedia.org / wiki / bmp_file_format . Suivez les étapes ci-dessous. P>
Les octets seraient respectivement 0, 0 et 255. (Je ne sais pas si la commande est RVB. J'avais fait ce long retour et je pense que la commande n'est pas RVB. Vérifiez simplement cela.) P>
aussi simple que ça! Étudiez l'en-tête du BMP pour en savoir plus sur le format. P>
Remarque: Vous devrez peut-être saisir un octet supplémentaire pour les valeurs alpha si votre BMP a une chaîne alpha. Dans ce cas, l'image serait image [pixelcount] [4] code>, et vous ajouteriez une autre
getc (streamin) code> ligne pour contenir ce quatrième index. Mon BMP s'est avéré pas besoin de cela.
// super-simplified BMP read algorithm to pull out RGB data
// read image for coloring scheme
int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
FILE *streamIn;
streamIn = fopen("./mybitmap.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
exit(0);
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<1024;i++){ // foreach pixel
image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel
image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte
image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue...
printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
}
fclose(streamIn);
N'y a-t-il pas un chunk en-tête, vous devez dépasser avant de toucher les données d'image?
@Anon Et si mon fichier est JPEG?