SetPixel transparent

cs_amlb Messages postés 8 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 18 mai 2006 - 16 mai 2006 à 14:38
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 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

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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
16 mai 2006 à 18:17
Salut

essaie ceci :

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



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

http://www.bobpowell.net/giftransparency.htm
0
cs_amlb Messages postés 8 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 18 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);

//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 :)
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_amlb Messages postés 8 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 18 mai 2006
18 mai 2006 à 08:46
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 !!!!
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
6 août 2006 à 00:15
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
0
Rejoignez-nous