Croqmort
Messages postés
95
Date d'inscription
mercredi 5 décembre 2001
Statut
Membre
Dernière intervention
27 juin 2006
5 févr. 2002 à 23:07
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;
}