WPF C#捕获半透明背景的画布图像

WPF C#捕获半透明背景的画布图像,c#,wpf,rendertargetbitmap,C#,Wpf,Rendertargetbitmap,更新:不是重复的。 我的问题不是如何截图。我知道,但这不是我需要的。我可以在画布上使用其他控件,我不想捕获它们,只想捕获画布中的图像,并且该图像在画布下透明可见 我需要在不透明度为50%的画布上捕获图像,但捕获的图像有黑色背景,而不是背景(桌面)中的图像 我使用以下代码捕获图像: MemoryStream ms = new MemoryStream(); RenderTargetBitmap rtb = new RenderTargetBitmap(1920, 1080, 96d, 96d, P

更新:不是重复的。

我的问题不是如何截图。我知道,但这不是我需要的。我可以在画布上使用其他控件,我不想捕获它们,只想捕获画布中的图像,并且该图像在画布下透明可见

我需要在不透明度为50%的画布上捕获图像,但捕获的图像有黑色背景,而不是背景(桌面)中的图像

我使用以下代码捕获图像:

MemoryStream ms = new MemoryStream();
RenderTargetBitmap rtb = new RenderTargetBitmap(1920, 1080, 96d, 96d, PixelFormats.Default);
rtb.Render(canvasCapture);
BmpBitmapEncoder BmpEncoder = new BmpBitmapEncoder();
BmpEncoder.Frames.Add(BitmapFrame.Create(rtb));
BmpEncoder.Save(ms);
这是画布:

<Canvas x:Name="canvasCapture" Background="#7F0F0F0E" />

在我的应用程序中,我可以在画布下透明地看到桌面,但捕获的图像有黑色背景。
如何捕获应用程序中显示的背景图像?

位图图像不支持透明背景。它会自动用黑色填充透明区域。您可以尝试以PNG格式保存和使用图像。

BMP不支持透明度。试试PNG。下面的评论是:“我需要捕获一个位图,因为我需要使用AForge在视频中对它进行编码”——AForge支持PNG。至于拍摄背景图像,而不是透明像素,这取决于拍摄方式和内容。如果直接在WPF程序中呈现视觉效果,则只呈现WPF程序知道的内容。这不包括桌面背景。如果你想包括桌面背景,你需要使用一些能够捕捉实际屏幕像素的东西。查看标记的重复项。@PeterDuniho我的问题不是如何截图。我知道,但这不是我需要的。我可以在画布上使用其他控件,我不想捕获它们,只想捕获画布中的图像,该图像在画布下透明可见。@PeterDuniho PS。我已绑定到使用PNG对视频进行编码,但当我播放它时,我得到一个不支持格式的错误。顺便说一句,如果我保存一个BMP或PNG是不相关的,因为正如我说的,我需要在画布下捕获图像,而不是一个空的透明背景。“我的问题不是如何截图”——当然是这样。您已经明确表示希望位图包含透明窗口后面的桌面背景图像。要做到这一点,唯一的方法是捕获一个屏幕截图。如果屏幕上有其他您不想包含的元素,则可能需要裁剪结果。但是你必须从截图开始。谢谢你的回答。我不需要有一个透明的图像,但捕捉的背景,我在透明度看到的图像。我还需要捕获位图,因为我需要在视频中使用一个RGE对其进行编码。