2008-10-02 7 views
6

J'ai un objet de type System.Drawing.Image et je souhaite que chaque pixel ayant une couleur spécifique, par exemple noire, soit transparent 0 pour ce pixel).Rendre chaque pixel d'une image ayant une couleur spécifique transparente

Quelle est la meilleure façon de faire cela?

+0

J'ai une question très similaire et je me demandais si vous pouviez me aider: http://stackoverflow.com/questions/1096165/transparent-winform-using-selective- couleurs –

Répondre

6

Une bonne approche consiste à utiliser la classe ImageAttributes pour configurer une liste de couleurs à remapper lors du dessin. L'avantage de ceci est une bonne performance ainsi que vous permettant de modifier les couleurs de remappage très facilement. Essayez quelque chose comme ce code ...

ImageAttributes attribs = new ImageAttributes(); 
List<ColorMap> colorMaps = new List<ColorMap>(); 
// 
// Remap black top be transparent 
ColorMap remap = new ColorMap(); 
remap.OldColor = Color.Black; 
remap.NewColor = Color.Transparent; 
colorMaps.Add(remap); 
// 
// ...add additional remapping entries here... 
// 
attribs.SetRemapTable(colorMaps.ToArray(), ColorAdjustType.Bitmap); 
context.Graphics.DrawImage(image, imageRect, 0, 0, 
          imageRect.Width, imageRect.Height, 
          GraphicsUnit.Pixel, attribs); 
2

Savez-vous seulement que c'est une image? Si c'est un bitmap, vous pouvez appeler LockBits, vérifier/réparer chaque pixel, puis déverrouiller les bits à nouveau.

3

Construisez un bitmap à partir de l'image, puis appelez MakeTransparent() sur ce bitmap. Cela vous permet de spécifier une couleur qui devrait être rendue transparente.

+0

MakeTransparent fonctionnera, mais très probablement vous voulez écrire une fonction qui fait la même chose mais fonctionne avec une tolérance. Cela permet un mélange plus lisse dans la composition. – plinth

+0

Merci, j'ai fini par utiliser MakeTransparent, mais j'ai décidé d'accepter la réponse de Phil Wright parce qu'elle est plus générale et a obtenu le plus de votes. – leod

Questions connexes