2015-03-15 1 views
2

J'ai un fichier .bmp de 1280 x 720 pixels que je veux charger dans image2 qui est déclaré comme ce qui suit:Comment convertir une image .bmp en tableau d'octets en utilisant C Programme

uint8_t * imageByte = NUL;

image2 est un fichier nommé home1.bmp

je veux lire le fichier bmp et convertir bmp image tableau d'octets imageByte que je vais utiliser pour comparer avec home.bmp

I relativement nouveau à la programmation c, donc quelqu'un peut me dire comment dois-je utiliser pour le faire? Merci! Cette partie de mon bmp code de comparaison d'image qui comparera image1 avec image2

# define BYTES_PER_PIXEL 4 
# define BITMAP_HEADER 54 
int temp_width = 1280; 
int temp_height = 720; 
int temp_x = 0; 
int temp_y = 0; 
uint8_t k = 0; 
char* image1= "E:\\home.bmp"; 
fp = fopen(image,"rb"); 
fseek(fp, 0, SEEK_SET); 
fseek(fp, BITMAP_HEADER, SEEK_SET); 
for(temp_y=0; temp_y<temp_height; temp_y++) 
{ 
    temp_x = 0; 

    for(temp_x=0; temp_x < (temp_width * BYTES_PER_PIXEL); temp_x++) 
    { 
     int read_bytes = fread(&k, 1, 1, fp); 
     if(read_bytes != 0) 
     { 
      if(k != imageByte[temp_x]) 
      { 

       printf("CompareImage :: failed \n"); 
       fclose(fp); 

      } 
     } 
     else 
     { 
      printf("CompareImage :: read failed \n"); 
     } 
    } 
} 
printf("CompareImage :: passed \n"); 
+1

Un fichier bitmap .BMP contient un en-tête. Cet en-tête contient des informations telles que les dimensions, la profondeur et le type de compression. Votre code ne prend pas en compte cet en-tête. Vous devrez le faire avant de continuer. Sachez également que chaque ligne doit être complétée avec un multiple de 4 octets. Dans une image 32 bits, vous n'avez pas besoin de vous en préoccuper - dans tout autre type, vous devez le faire. MSDN contient des informations sur BITMAPFILEHEADER. Voici un bon point de départ: https://msdn.microsoft.com/en-us/library/windows/desktop/dd183374%28v=vs.85%29.aspx – enhzflep

+0

Qu'en est-il de faire cela: https: // www. google.com/search?q=read+bmp+C+site:stackoverflow.com – alk

+0

Comment "comparer 2 images BMP" est-il différent du "comparer 2 fichiers" régulier? Si vous voulez les comparer pour vérifier si vous avez un fichier en double, il n'est pas nécessaire de les traiter comme des BMP. D'autre part, si vous voulez comparer * data *, devez-vous, par exemple, savoir si un fichier indexé en couleur est identique à un fichier en couleurs vraies? – usr2564301

Répondre

3

Comme mentionné ci-dessus, un fichier BMP commence par 1] Un en-tête de fichier qui donne des informations sur le fichier, comme la taille ..etc 2] BMP-tête d'information qui donne plus d'informations sur les propriétés BMP Ces structures sont de taille fixe

Le lien suivant semble être une référence parfaite pour vous http://paulbourke.net/dataformats/bmp/

Vous devriez pouvoir vous débarrasser de la comparaison des octets par octets qui est coûteuse dans la plupart des cas, simplement en lisant les deux en-têtes structurés depuis le début et en les comparant. Effectue une comparaison octets par octets uniquement des en-têtes correspondants.

Hope it helps

+0

J'ai besoin de comparer les octets par octets parce que certaines images sont statiques et certaines images contiennent une zone dynamique, donc je vais exclure la zone dynamique lors de la comparaison –