Question

J'ai une question pour lire une image bmp. Comment puis-je obtenir la valeur de pixel (valeurs R, G, B) dans une image bmp? Quelqu'un peut-il me aider en utilisant le langage de programmation C?

Était-ce utile?

La solution

La façon simple serait de trouver une bonne bibliothèque de manipulation d'images pour votre plate-forme choisie et l'utiliser.

La dure serait d'ouvrir le fichier et interpréter réellement les données binaires au sein. Pour ce faire, vous aurez besoin BMP Spécification du fichier. Je vous recommande d'essayer le moyen facile d'abord.

Autres conseils

Remarque: vous devrez peut-être saisir un octet supplémentaire pour les valeurs alpha si votre BMP a canal alpha. Dans cette image de cas serait image[pixelcount][4], et vous devez ajouter une autre ligne de getc(streamIn) pour tenir ce quatrième indice. Mon BMP est avéré pas besoin.

 // 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);

~ Locutus

Vous devez étudier le format de fichier BMP. Il est plus facile de lire des fichiers non compressés BMP 24 bits. Ils contiennent juste un en-tête au début et les valeurs RVB de chaque pixel.

Pour commencer avec cela, vérifiez l'exemple de 2x2 image bitmap à http://en.wikipedia.org / wiki / BMP_file_format . Suivez les étapes ci-dessous.

  1. Créer l'image 2x2 BMP figurant sur Wikipedia.
  2. Ouvrez le fichier en mode binaire en utilisant votre programme C.
  3. Recherche de position d'octet 54.
  4. Lire 3 octets.

Les octets serait 0, 0 et 255 respectivement. (Je ne sais pas si l'ordre est RVB. Je l'avais fait ce long retour et je pense que l'ordre ne soit pas RVB. Il suffit de vérifier.)

Aussi simple que cela! Étudier l'en-tête du BMP pour comprendre plus sur le format.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top