Это зависит от того, нужно ли вам использовать монохромные растровые изображения или вы просто хотите иметь возможность перекрасить изображение.Если вы можете использовать любой формат изображения, я бы использовал png с альфа-каналом, тогда вы можете использовать изображение как OpacityMask, код не требуется.Используя изображение в качестве OpacityMask, вы можете легко изменить цвет, использовать градиент или ImageBrush.
<Rectangle Fill="Blue">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="..." />
</Rectangle.OpacityMask>
</Rectangle>
Если вам нужно использовать 1-битные растровые изображения, довольно просто преобразовать их в индексированный формат с помощьюПользовательская палитра.Вы можете установить нужный цвет в палитре или просто выбрать что-нибудь и использовать его в качестве OpacityMask.FormatConvertedBitmap, по-видимому, нуждается в другом формате, просто другая палитра не имела никакого эффекта.
public static FormatConvertedBitmap Recolor(BitmapImage b, Color c)
{
return new FormatConvertedBitmap(b, PixelFormats.Indexed2, new BitmapPalette(new List<Color>() { Colors.Transparent, c }), 0);
}
Другой вариант - это PixelShader, это немного излишне для таких вещей, но для более сложных манипуляций они полезны.