Делаем каждый пиксель изображения определенного цвета прозрачным - PullRequest
6 голосов
/ 02 октября 2008

У меня есть объект типа System.Drawing.Image, и я хочу сделать каждый пиксель, который имеет определенный цвет, например черный, прозрачным (то есть для этого пикселя установить альфа в 0).

Каков наилучший способ сделать это?

Ответы [ 3 ]

6 голосов
/ 02 октября 2008

Один хороший подход - использовать класс ImageAttributes для настройки списка цветов, которые будут переназначаться при рисовании. Преимущество этого заключается в хорошей производительности, а также позволяет очень легко изменять переназначение цветов. Попробуйте что-то вроде этого кода ...

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);
3 голосов
/ 02 октября 2008

Создайте растровое изображение из изображения, а затем вызовите MakeTransparent () для этого растрового изображения. Позволяет указать цвет, который должен отображаться как прозрачный.

2 голосов
/ 02 октября 2008

Знаете ли вы, что это изображение? Если это растровое изображение, вы можете вызвать LockBits, проверить / исправить каждый пиксель и снова разблокировать биты.

...