如何在WPF中以彩色渲染单色位图?
回到Win32时代,如果我有一个单色位图,不管出于什么目的,它只是一个位图掩码,我可以将该位图渲染到DeviceContext上。将发生的情况是,每个像素(其中有一个“0”)都渲染为透明,而每个像素(其中有一个“1”)都在当前选定的前景色中渲染。这很方便 然而,经过几周的搜索,我还没有在WPF中看到任何类似的东西如何在WPF中以彩色渲染单色位图?,wpf,bitmap,render,bitmapimage,monochrome,Wpf,Bitmap,Render,Bitmapimage,Monochrome,回到Win32时代,如果我有一个单色位图,不管出于什么目的,它只是一个位图掩码,我可以将该位图渲染到DeviceContext上。将发生的情况是,每个像素(其中有一个“0”)都渲染为透明,而每个像素(其中有一个“1”)都在当前选定的前景色中渲染。这很方便 然而,经过几周的搜索,我还没有在WPF中看到任何类似的东西 现在我正要开始我自己的单色摄影课,但我想如果有人知道另一种方法,那就是你们所有的S.O.用户,所以我的问题是。。。在WPF中,如何渲染一个值为特定颜色,另一个值为透明的单色位图?这取决
现在我正要开始我自己的单色摄影课,但我想如果有人知道另一种方法,那就是你们所有的S.O.用户,所以我的问题是。。。在WPF中,如何渲染一个值为特定颜色,另一个值为透明的单色位图?这取决于您是需要使用单色位图,还是只想重新着色图像。如果您可以使用任何图像格式,我将使用png和alpha,然后您可以使用图像作为不透明的掩码,无需代码。通过将图像用作不透明遮罩,您可以使用渐变或图像笔刷轻松更改颜色
<Rectangle Fill="Blue">
<Rectangle.OpacityMask>
<ImageBrush ImageSource="..." />
</Rectangle.OpacityMask>
</Rectangle>
如果需要使用1位位图,使用自定义调色板将其转换为索引格式非常简单。您可以在调色板中设置所需的颜色,或者选择任何颜色,将其用作不透明材质。FormatConvertedBitmap似乎需要不同的格式,只是不同的调色板没有效果
public static FormatConvertedBitmap Recolor(BitmapImage b, Color c)
{
return new FormatConvertedBitmap(b, PixelFormats.Indexed2, new BitmapPalette(new List<Color>() { Colors.Transparent, c }), 0);
}
公共静态格式ConvertedBitmap Recor(位图图像b,颜色c)
{
返回新的FormatConvertedBitmap(b,PixelFormats.Indexed2,新的BitmapPalette(new List(){Colors.Transparent,c}),0);
}
另一个选择是像素着色器。这对于这种类型的东西来说有点过分,但对于更复杂的操作,它们是有用的。一个非常类似的功能是
UIElement
的OpacityMask
。它将显示不透明掩码中不透明的部分。它可以与
- 画笔-
等SolidColorBrush
- 视觉效果-
VisualBrush
- 图像-
ImageBrush
- 等
图像笔刷的按钮的示例
<Button Content="Opacity Mask">
<Button.OpacityMask>
<ImageBrush ImageSource="C:\OpacityRect.png"/>
</Button.OpacityMask>
</Button>