Bonjour à tous,
Je sollicite votre aide après avoir fait de longues recherches sur internet .
J’écris actuellement un code qui me servira dans le but de comparer la couleur d’un pixel donné d’une image avec tout les autres pixels de l’image.
Dans le cas ou ces deux couleurs sont identiques, je change la couleur du deuxième pixel en noir.
Par exemple si je prends une image de couleur uniforme et que je prend la couleur d’un pixel de cette image comme référence .
Je parcours tout les pixel un à un de cette image, et si tout se passe bien mon image final devrait être entièrement noire.
Dans mon cas , le problème est que lorsque je parcours les différents pixel de mon image, ceci influence les valeur de r,g,b .
Dans mon code rond.png est un carré mauve uniforme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include "SDL_image.h" int main (int argc, char ** argv ) { Uint8 r, g, b; Uint8 re,gre,blue; SDL_Surface *img=NULL; int i,taille; Uint32 couleur,echantillon; img=IMG_Load("images/rond.png"); SDL_GetRGB(*(Uint32*)img->pixels+10, img->format, &re, &gre, &blue); echantillon=SDL_MapRGB(img->format,re,gre,blue); fprintf(stderr, " %d %d %d ",re,gre,blue); /* ici je crée ma couleur de référence, JE CHOISI UN PIXEL DE COORDONNES 0,10 ET JE RECUPERE LES VALEURS DE redref,blueref,greenref Mais la je rencontre un problème si je prend un pixel de coordonnées 0,11 blueref va sincrémenter de 1, cest pourquoi dans ma boucle if seul un pixel de même couleur est détecté */ couleur=SDL_MapRGB(img->format,9,9,9); taille=img->w*img->h; for(i=0;i<taille;i++) { SDL_GetRGB(*(Uint32*)img->pixels+i, img->format, &r,&g,&b); if(r==re && g==gre && blue==b){ *( (Uint32*)img->pixels+i) =couleur;fprintf(stderr,"+");} // fprintf me permet d afficher le nombre dentrée dans la boucle // même si je peux vérifier sur limage finale que les pixel ont bien été modifié } SDL_SaveBMP(img, "image.png"); //résultat l image modifie n est pas noire, seul le pixel de coordonnées 0,10 est modifié return 0; }
J’ai aussi essayer ce bout de code sur la fin qui ne marche pas non plus on ne rentre même pas une fois dans le if une seule fois l image reste intacte.
J‘ai déjà utilisé GetRGB pour ce genre de manipulation mais cette fois-ci je coince vraiment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for(i=0;i<taille;i++) { if(*( (Uint32*)img->pixels+i)==echantillon) *( (Uint32*)img->pixels+i) =couleur; }
J’espère avoir votre aide car j’ai vraiment tout essayé j’ai essayer de coller l image sur un écran pour comparer les couleurs de mon image, sans résultat.
Merci d’avance
Partager