我正在尝试使用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;
}
它可以工作,但透明像素用黑色渲染。 将这些透明像素更改为另一种颜色的最简单方法是什么?
答案 0 :(得分:1)
如果您将图像保存为JPG,则透明将显示为黑色,因为JPG不支持透明通道AFAIK。可能的解决方案:保存为PNG,或使用合理的背景颜色进行绘制。
答案 1 :(得分:1)
我没有对此进行过测试,但理论上它应该可行。
使用CopyPixels()方法将RenderTargetBitmap中的所有像素数据提取到数组中。
然后查询所有这些像素的Alpha通道以及它们等于0x00(完全透明)的位置,将颜色设置为背景中您想要的颜色。如果你想要更优雅,你必须做“颜色数学”才能在半透明像素中正确设置颜色。
最后,在调整了像素数组后,从中创建一个新的BitmapSource。
要将其保存到磁盘,您可能需要在内存中创建一个Image并将其Source设置为新的Bitmapsource并再次运行RenderToBitmap。
希望它有所帮助。
编辑: 发布后,我有 另一种想法可能更容易。
如果您拍摄的克隆或快照 你试图保存的视觉元素 并将其放入新的内存中面板 (例如网格或画布),你 可以简单地改变背景 面板是你想要的颜色。
然后你将面板用作你的面板 RenderTargetBitmap的源代码。