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





Вы знаете только, что это Изображение? Если это Bitmap, вы можете вызвать LockBits, проверить / исправить каждый пиксель, а затем снова разблокировать биты.
Создайте растровое изображение из изображения, а затем вызовите MakeTransparent () для этого растрового изображения. Он позволяет указать цвет, который должен отображаться как прозрачный.
MakeTransparent будет работать, но, скорее всего, вы захотите написать функцию, которая делает то же самое, но работает с допуском. Это способствует более плавному смешиванию при композитинге.
Спасибо, в итоге я использовал MakeTransparent, но решил принять ответ Фила Райта, потому что он более общий и получил наибольшее количество голосов.
Один хороший подход - использовать класс 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);
у меня очень похожий вопрос, и мне было интересно, не могли бы вы мне помочь: stackoverflow.com/questions/1096165/…