我有一个WPF面板(在WPF应用程序中),它包含一组Winform和WPF元素。 Winform元素通过WindowsFormsHost
。
我需要创建整个面板的BitmapSource(完全如此),这样我就可以操作/保存/打印出来。
创建WPF元素的BitmapSource并不是一个问题,但Winform元素不会被渲染(它们应该只有一个空格)。
其中一个例子:
void GetBitmapSource(FrameworkElement element)
{
var matrix = PresentationSource.FromVisual(element).CompositionTarget.TransformToDevice;
double dpiX = 96.0 * matrix.M11;
double dpiY = 96.0 * matrix.M22;
var bitmapSource = new RenderTargetBitmap((int)element.ActualWidth + 1, (int)element.ActualHeight + 1, dpiX, dpiY, PixelFormats.Pbgra32);
bitmapSource.Render(element);
return bitmapSource;
}
这将打印WPF元素,但忽略Winform内容。我该如何加入?
下图显示左侧的Tabpanel和右侧的BitmapSource。注意Winform Rectangle的内容是如何为空。
答案 0 :(得分:1)
如何拍摄完整的屏幕截图,然后将其剪切为元素?
BitmapSource ScreenShot(int x, int y, int width, int height)
{
using (var screenBitmap = new Bitmap(width,height,System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
using (var g = Graphics.FromImage(screenBitmap))
{
g.CopyFromScreen(x, y, 0, 0, screenBitmap.Size);
var result = Imaging.CreateBitmapSourceFromHBitmap(
screenBitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
return result;
}
}
}