Bitmap: colorisation de pixels...Help!

Signaler
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006
-
Bonjour,

Voilà, j'ai un petit problème de colorisation d'une Bitmap... Je dois effectuer un remplissage de couleur (comme dans Paint) et je dois coloriser les pixels de ma Bitmap (avec la BackColor d'un label) qui ont à la base la même couleur que la BackColor d'un autre label... pour faire ça, j'utilise le code suivant:



public struct Pixel32Data // Format des 4 octets d'un pixel pour les images 32Bits
{
public byte blue;
public byte green;
public byte red;
public byte A;
}
........

int W = ImageChoisie.Image.Width; // Longueur de mon image dans une picture box
int H = ImageChoisie.Image.Height; // Hauteur de mon image dans une picture box
Bitmap bmp = new Bitmap(ImageChoisie.Image, W, H); // Création de la Bitmap
PixelFormat pf = bmp.PixelFormat; // Spécification du format de la Bitmap
Rectangle rc = new Rectangle(0, 0, W, H); // Création d'un Rectangle
BitmapData bmpData = bmp.LockBits(rc, ImageLockMode.ReadWrite, pf); // Création des attributs
Pixel32Data* p, pDebut= (Pixel32Data*)bmpData.Scan0; // Initialisation des pointeurs, un pour la ligne, un pour le 1er pixel de l'image


for (int li = 0; li < H; li++) // Pour chaque ligne
{
p = pDebut + li * W; // Adresse de début de la ligne
for (int col = 0; col < W; col++) // Pour chaque pixel de la ligne
{
Color cc= bmp2.GetPixel(col, li);

if((p->red+p->green+p->blue) == ((byte)CouleurCible.BackColor.R+(byte)CouleurCible.BackColor.G+(byte)CouleurCible.BackColor.B)) // Comparaison des couleurs av le 1e label
{
p->red = (byte)CouleurRemplace.BackColor.R; // Element rouge du 2e label
p->green = (byte)CouleurRemplace.BackColor.G; // Element vert du 2e label
p->blue = (byte)CouleurRemplace.BackColor.B; // Element bleu du 2e label
p->A = 1; // Element de transparance
}
p++; // On passe au pixel suivant
}
}
bmp.UnlockBits(bmpData); // On désactive les attributs


Seulement, quand je veux afficher l'image après remplissage dans la picture box, je me retrouve toujours avec un remplissage en bleu, donc les pixels correspondant aux critères sont changées mais TOUJOURS en bleu... Je ne comprend pas ce qu'il se passe, je ne vois pas mon erreur...

Si qq'un peut m'aider, je le remercie d'avance!

Note: Je sais qu'il existe les fonctions GetPixel et SetPixel pour les couleurs mais cette technique-ci, grâce aux pointeurs, est plusieurs dizaines de fois plus rapide!

2 réponses

Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006

"Color cc= bmp2.GetPixel(col, li);"

Cette ligne n'a rien à faire là, j'ai fait une mauvaise manip.

Le reste est ok!
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
26 septembre 2006

Mais ça ne marche toujours pas... mon code n'avait pas la mauvaise manip...