我在 WindowsFormsHost
中有一组控件,我想捕获当前 View 并将其保存为图像,但是我只能在图像中看到一些 Panel
。
是否可以将 WindowsFormsHost 用作“Visual”并捕获包装的控件?
看我的例子:
<WindowsFormsHost x:Name="windowHost">
<wf:Panel Dock="Fill" x:Name="basePanel"/>
</WindowsFormsHost>
如果我要向
basePanel
添加一个 Button 或其他任何内容,则在使用以下代码导出到 PNG 时将不可见: RenderTargetBitmap rtb = new RenderTargetBitmap(basePanel.Width,
basePanel.Height, 96, 96, PixelFormats.Pbgra32);
rtb.Render(windowHost);
PngBitmapEncoder pnge = new PngBitmapEncoder();
pnge.Frames.Add(BitmapFrame.Create(rtb));
Stream stream = File.Create("test.jpg");
pnge.Save(stream);
stream.Close();
关于为什么这可能不起作用的建议以及可能的解决方法?我想这不是真的应该以这种方式工作,但人们真的可以希望!
最佳答案
Windows 窗体控件也知道如何呈现自身,您不必跳过屏幕捕获环。让它看起来像这样:
using (var bmp = new System.Drawing.Bitmap(basePanel.Width, basePanel.Height)) {
basePanel.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save(@"c:\temp\test.png");
}
关于c# - 在 WindowsFormsHost 上使用 RenderTargetBitmap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1756954/