如何为RenderTargetBitmap的输出设置透明度颜色?

我试图使用RenderTargetBitmap将具有透明背景的Visual对象保存到位图中...

public static RenderTargetBitmap RenderToBitmap(this Visual Source, int Width, int Height)
    {
        var Result = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Default);

        Result.Render(Source);
        return Result;
    }

它可以工作,但透明像素呈现黑色。 将这些透明像素更改为其他颜色的最简单方法是什么?


如果您将图像保存为JPG,透明图像将显示为黑色,因为JPG不支持透明通道AFAIK。 可能的解决方案:保存为PNG,或使用合理的背景颜色进行绘制。


我没有测试过这个,但理论上它应该起作用。

  • 使用CopyPixels()方法将RenderTargetBitmap中的所有像素数据提取到数组中。

  • 然后查询所有这些像素的Alpha通道以及它们等于0x00(完全透明)的位置,将颜色设置为背景中您想要的任何颜色。 如果你想变得更加优雅,你需要做“颜色数学”来正确设置半透明像素的颜色。

  • 最后,在您调整了像素阵列后,从它们创建一个新的BitmapSource。

  • 为了将其保存到磁盘,您可能需要在内存中创建一个Image并将其Source设置为新的Bitmapsource,然后再次运行RenderToBitmap。

  • 希望能帮助到你。

    编辑:发布后,我有另一种想法可能会更容易。

    如果您想要保存的可视元素的克隆或快照并将其放入新的内存中面板(例如网格或画布),则只需将面板背景更改为颜色即可你要。

    然后,您将使用该面板作为RenderTargetBitmap的源代码。

    链接地址: http://www.djcxy.com/p/26875.html

    上一篇: How to set Transparency color for the output of RenderTargetBitmap?

    下一篇: Drawing on WriteableBitmap