Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF中以彩色渲染单色位图?_Wpf_Bitmap_Render_Bitmapimage_Monochrome - Fatal编程技术网

如何在WPF中以彩色渲染单色位图?

如何在WPF中以彩色渲染单色位图?,wpf,bitmap,render,bitmapimage,monochrome,Wpf,Bitmap,Render,Bitmapimage,Monochrome,回到Win32时代,如果我有一个单色位图,不管出于什么目的,它只是一个位图掩码,我可以将该位图渲染到DeviceContext上。将发生的情况是,每个像素(其中有一个“0”)都渲染为透明,而每个像素(其中有一个“1”)都在当前选定的前景色中渲染。这很方便 然而,经过几周的搜索,我还没有在WPF中看到任何类似的东西 现在我正要开始我自己的单色摄影课,但我想如果有人知道另一种方法,那就是你们所有的S.O.用户,所以我的问题是。。。在WPF中,如何渲染一个值为特定颜色,另一个值为透明的单色位图?这取决

回到Win32时代,如果我有一个单色位图,不管出于什么目的,它只是一个位图掩码,我可以将该位图渲染到DeviceContext上。将发生的情况是,每个像素(其中有一个“0”)都渲染为透明,而每个像素(其中有一个“1”)都在当前选定的前景色中渲染。这很方便

然而,经过几周的搜索,我还没有在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>