SetPixel transparent

Signaler
Messages postés
8
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
18 mai 2006
-
scoubidou944
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
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

fichier2 = new FileStream(Application.StartupPath + "\" + "image\" + nom_tampon + ".gif",FileMode.Create,FileAccess.Write);

bit.Save(fichier2,ImageFormat.Gif);

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" />

6 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
42
Salut

essaie ceci :

bit.MakeTransparent(Color.White);
bit.Save(TonFichier, ImageFormat.Gif);



Mx
MVP C#
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
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 :

http://www.bobpowell.net/giftransparency.htm
Messages postés
8
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
18 mai 2006

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);

//Sauvegarde truc2ouf.gif   
bm.Save(Application.StartupPath + "\" + "image\" + "truc2ouf" + ".gif",ImageFormat.Gif);

Mais la couleur blanche reste blanche et je veux que chaque pixel blanc soit transparent...

AU SECOURS :)
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
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.
Messages postés
8
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
18 mai 2006

J'ai vraiment besoin d'aide... J'ai pourtant la bonne valeur pour Alpha dans la ColorPalette pour la couleur blanche...

A:0 R:255 G:255 B:255

et toujours pas de pixels transparents...

AU SECOURS !!!!
Messages postés
728
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Vive google ;p

http://www.codeguru.com/Csharp/.NET/net_general/graphics/article.php/c4661/

1) Convert your image to a bitmap

Bitmap Logo = new Bitmap(CompanyLogo.Image);

2) select the background color (here the left top pixel) and make it transparent

Logo.MakeTransparent(Logo.GetPixel(1, 1));

3) Finally convert it back to the image

CompanyLogo.Image = (Image) Logo;

----------------------------

C++ forever
C# amateur