cs_amlb
Messages postés8Date d'inscriptionlundi 30 janvier 2006StatutMembreDernière intervention18 mai 2006
-
16 mai 2006 à 14:38
scoubidou944
Messages postés714Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention19 janvier 2017
-
6 août 2006 à 00:15
Bonjour,
mon problème est le suivant: je traite une image Bitmap et je veux pouvoir transformer tous les pixels blanc de cette image en pixel transparent.
Bitmap bit = new Bitmap(fichier);
//Traitement de l'image pixel par pixel
for (y=0;y transparent
//Blanc = A:255 R:255 G:255 B:255
//Transparent = A:0 R:255 G:255 B:255 if (coul.A 255 && coul.R 255 && coul.G == 255 && coul.B == 255)
{
bit.SetPixel(x,y,Color.Transparent);
}
}
}
Puis je l'enregistre au format .gif car les .gif gèrent la transparence
Le truc c'est que mes pixels blanc ne sont pas transparent... Mon code est correct pour le traitement des pixels de l'image car si je met tous les pixels blanc en rouge cela marche sans problème... Alors pourquoi pas en transparent ?
Y a-t-il une autre méthode ?
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 16 mai 2006 à 22:13
Le format gif est limité à 256 couleurs il ne contient pas de canal alpha mais une palette indexée et la couleur transparente est un index de cette table :
cs_amlb
Messages postés8Date d'inscriptionlundi 30 janvier 2006StatutMembreDernière intervention18 mai 2006 17 mai 2006 à 11:52
Merci pour ta réponse Lurinore mais je n'y arrive toujours pas...
J'ai essayé de faire avec cette méthode qui consiste à modifier des ColorPalette mais ma couleur blanche ne devient toujours pas transparente...
Voici mon code ( AU SECOURS!!! )
//Création d'une image a partir du fichier
Image img = Image.FromFile("MonImage.gif");
//Récupère la palette de couleur de l'image
cp = img.Palette;
//Création d'une Bitmap de 8 bit par pixel
Bitmap bm = new Bitmap(img.Width,img.Height,PixelFormat.Format8bppIndexed);
//Récupère la palette de couleur de la Bitmap
ncp = bm.Palette;
n = 0;
foreach (Color c in cp.Entries)
{
ncp.Entries[n++] = Color.FromArgb(255,c);
}
//C'est ICI que je pense devoir remplacer la couleur blanche par la couleur transparente...
//15 signifie blanc dans une palette
ncp.Entries[15] = Color.FromArgb(0,cp.Entries[15]);
//Réinsérer la palette modifier
bm.Palette = ncp;
//Création de BitmapData src et dst
BitmapData src = ((Bitmap)img).LockBits(new Rectangle(0,0,img.Width,img.Height),ImageLockMode.ReadOnly,img.PixelFormat);
BitmapData dst = bm.LockBits(new Rectangle(0,0,bm.Width,bm.Height),ImageLockMode.WriteOnly,bm.PixelFormat);
unsafe
{
//Parcourt chaque pixel
for(y=0;y<img.Height;y++)
{
for(x=0;x<img.Width;x++)
{
//Transfert les bytes
((byte *)dst.Scan0.ToPointer())[(dst.Stride*y)+x]=((byte *)src.Scan0.ToPointer())[(src.Stride*y)+x];
}
}
}
//Unlock la Bitmap
((Bitmap)img).UnlockBits(src);
bm.UnlockBits(dst);
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 17 mai 2006 à 16:46
Si la solution 100% .NET est un peu compliqué il y a des librairies spécialisées pour la manipulation des images ( des gifs notamment ). J'ai pas les liens sous la main.. il existe aussi un wrapper managé pour la librairie C/C++ DevIL.
Vous n’avez pas trouvé la réponse que vous recherchez ?