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

时间:2011-03-28 20:38:53

标签: wpf

我正在尝试使用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;
    }

它可以工作,但透明像素用黑色渲染。 将这些透明像素更改为另一种颜色的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我没有对此进行过测试,但理论上它应该可行。

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

  2. 然后查询所有这些像素的Alpha通道以及它们等于0x00(完全透明)的位置,将颜色设置为背景中您想要的颜色。如果你想要更优雅,你必须做“颜色数学”才能在半透明像素中正确设置颜色。

  3. 最后,在调整了像素数组后,从中创建一个新的BitmapSource。

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

  5. 希望它有所帮助。

      

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

         

    如果您拍摄的克隆或快照   你试图保存的视觉元素   并将其放入新的内存中面板   (例如网格或画布),你   可以简单地改变背景   面板是你想要的颜色。

         

    然后你将面板用作你的面板   RenderTargetBitmap的源代码。