
Croqmort
|
bon c moche mis j'ai pas le temp de faire mieux en ce moment desolé !
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <memory.h> struct RVB{ unsigned char Rouge; unsigned char Vert; unsigned char Bleu; };
struct Position{ unsigned x; unsigned y; };
bool ComparePixel(RVB rvb1,RVB rvb2); bool CompareImg(Position *Pos,int &TaillePos,int largeur,int hauteur, unsigned char *img1, unsigned char *img2); bool PrendreTaille(int &largeur,int &hauteur,unsigned char *img); bool PrendrePixel(int x,int y,int largeur,int hauteur,RVB &Couleur,unsigned char *img); int TailleLigne(int largeur);
void main(){ FILE *Fichier; unsigned char *Contenu,*Contenu2; int Taille,largeur,hauteur; RVB Couleur; Position *Pos; int TaillePos;
if((Fichier = fopen("test.bmp","rb")) == NULL) return; fseek(Fichier,0,SEEK_END); Taille = ftell(Fichier); fseek(Fichier,0,SEEK_SET); Contenu = (unsigned char*) malloc(Taille); fread(Contenu,1,Taille,Fichier); fclose(Fichier);
if((Fichier = fopen("test2.bmp","rb")) == NULL){ free(Contenu); return; } fseek(Fichier,0,SEEK_END); Taille = ftell(Fichier); fseek(Fichier,0,SEEK_SET); Contenu2 = (unsigned char*) malloc(Taille); fread(Contenu2,1,Taille,Fichier); fclose(Fichier); Pos = (Position *) malloc(sizeof(Position)*Taille);
if(memcmp(Contenu,Contenu2,0x36)!=0){ printf("Entete de fichier different comparaison impossible\n"); free(Pos); free(Contenu); free(Contenu2); return; } PrendreTaille(largeur,hauteur,Contenu);
if(!CompareImg(Pos,TaillePos,largeur,hauteur,Contenu,Contenu2)){ printf("Probleme ...\n"); free(Pos); free(Contenu); free(Contenu2); return; } if(TaillePos == 0){ printf("Image Identique\n"); }else{ printf("Image Differentes\n"); }
free(Pos); free(Contenu); free(Contenu2); }
bool CompareImg(Position *Pos,int &TaillePos,int largeur,int hauteur, unsigned char *img1, unsigned char *img2){ TaillePos = 0; int x,y; RVB rvb1,rvb2;
for(y=0;y<hauteur;y++){ for(x=0;x<hauteur;x++){ if(!PrendrePixel(x,y,largeur,hauteur,rvb1,img1)) return false; if(!PrendrePixel(x,y,largeur,hauteur,rvb2,img2)) return false; if(!ComparePixel(rvb1,rvb2)){ Pos[TaillePos].x = x; Pos[TaillePos].y = y; TaillePos++; } } } return true; }
bool ComparePixel(RVB rvb1,RVB rvb2){ if(rvb1.Rouge != rvb2.Rouge) return false; if(rvb1.Vert != rvb2.Vert) return false; if(rvb1.Bleu != rvb2.Bleu) return false; return true; }
bool PrendreTaille(int &largeur,int &hauteur,unsigned char *img){ memcpy(&largeur,img+0x12,4); memcpy(&hauteur,img+0x16,4); return true; }
bool PrendrePixel(int x,int y,int largeur,int hauteur,RVB &Couleur,unsigned char *img){ int tmp; if((x<0)||(y<0)||(x>largeur)||(y>hauteur)) return false; tmp = ((hauteur-1)-y)*TailleLigne(largeur); tmp += 3*x; Couleur.Bleu = img[tmp+0x36]; Couleur.Vert = img[tmp+0x37]; Couleur.Rouge = img[tmp+0x38]; return true; }
int TailleLigne(int largeur){ int tmp; tmp = largeur*3; if((tmp%2)==1) tmp++; return tmp; }
------------------------------- Réponse au message : -------------------------------
bon je fait le prog cet nuit et je met ce que j'ai fait ici, demain soir
------------------------------- Réponse au message : -------------------------------
tu veux faire quoi ? que ton programme compare 2 fichier et t'indique les positions des pixels qui different ?
Oui ca m'aiderai bien ,ca ne serais qu'un debut mais ca serais tres bien
tu veux utiliser les gdi ou le faire directement en lisant les fichiers ?
je veux lire directement les fichiers ,c pour un prog de surveillance video
soit plus precis, indique ce que tu veut qu'indique le resultat de la comparaison des 2 bmp
en bref si le prog pouvais m'indique le nombre de pixel different et leur position ca serais le top
Merci d'avance Mavric
------------------------------- Réponse au message : -------------------------------
bonjour je cherche comment comparer 2 bmp pour faire de la detection de pixel ,mais je n'y arrive pas !!! Si vous pouviez me donner des infos ou un source sur lequel je peux me base ca m'avancerais beaucoup .Merci d'avance
|