2011-03-28 50 views
8

我试图挽救一个视觉对象,它有一个透明背景,使用RenderTargetBitmap位图...如何为RenderTargetBitmap的输出设置透明度颜色?

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

你把图像保存为jpeg吗?我将这种行为保存为JPEG格式并将其保存为PNG – 2011-03-28 20:43:07

+0

保存为.JPG文件。我认为所有格式的输出应该相同,因此需要将透明度更改为特定的颜色。 – 2011-03-28 20:52:22

回答

1

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

1

我还没有测试过这个,但理论上它应该可以工作。

  1. 使用CopyPixels()方法来从RenderTargetBitmap的所有像素数据提取到一个数组。

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

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

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

希望它有帮助。

编辑: 张贴在此之后,我不得不 又一想,可能是更容易。

如果拿 视觉元素的克隆或快照您正试图保存 ,并把它变成一个新的内存板 (如电网或帆布),你 可以简单地改变背景 面板是你想要的颜色。

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

+0

嗨,我正在尝试你用UWP说的话,但我得到了一个黑色的背景。这是为什么? – gayan1991 2016-04-28 01:31:56

相关问题