这取决于您是否需要使用单色位图,或者您只是希望能够重新着色图像。如果您可以使用任何图像格式,我会使用带有 alpha 的 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,这对于这种事情来说有点矫枉过正,但对于更复杂的操作它们很有用。