首页 新闻 会员 周边

WPF无法通过窗口句柄获取到窗体内的内容

0
悬赏园豆:5 [已解决问题] 解决于 2019-11-29 16:31

需要把WPF的一个窗口所展示的内容保存为一张图片存放到本地,要求窗口无论是显示还是隐藏都需要获取到内容进行保存。我的WPF相关内容是放在Winfrom的ElementHost控件中,通过ElementHost的Paint事件,拿到句柄保存的图片的空白的。

功能核心代码如下:
System.Windows.Forms.Integration.ElementHost.Paint += new System.Windows.Forms.PaintEventHandler(this.ContentViewControl_OnPaint);

private void ContentViewControl_OnPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Bitmap bit = new Bitmap(800, 600);
e.Graphics.DrawImage(bit, new System.Drawing.Point(0, 0));
bit.Save("D:\1.png");
}

Marching的主页 Marching | 菜鸟二级 | 园豆:203
提问于:2019-11-15 16:25
< >
分享
最佳答案
0

这可能跟wpf刷新机制有关,wpf在winform中就会存在这样的问题,最小化窗口截图没有图像,可以确定的是显示窗口时可以截图,
如果能接受的话就先form.show在进行screenshot然后form.hide,这样效果会有一个黑影一闪而过,
如果你还有其他窗口显示的话,可以设置其他窗口topmost为true,在显示窗口截图然后隐藏,此时现实的窗口会被他起窗口遮挡,这样能解决黑影一闪而过的问题,别忘了最后再设置topmost为false

收获园豆:5
猝不及防 | 老鸟四级 |园豆:2781 | 2019-11-20 11:03
其他回答(2)
0

可以尝试使用 win32 api .

小小高 | 园豆:1095 (小虾三级) | 2019-11-19 17:50
1

由于Winfrom和WPF窗口刷新机制不同,通过Winfrom的窗口句柄无法获取以WPF绘制的图像内容,目前采用WPF项目自行截图保存,在调用其图片在其他项目中进行显示。
using (System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Create,
FileAccess.Write, FileShare.ReadWrite))
{

                            System.Windows.Media.Imaging.RenderTargetBitmap img =
                                new System.Windows.Media.Imaging.RenderTargetBitmap((int)ui.ActualWidth,
                                    (int)ui.ActualHeight, 96d, 96d, System.Windows.Media.PixelFormats.Pbgra32);

                            img.Render(ui);

                            System.Windows.Media.Imaging.JpegBitmapEncoder encoder =
                                new System.Windows.Media.Imaging.JpegBitmapEncoder();

                            encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(img));
                            encoder.Save(fs);

                            fs.Close();
                        }

该实现方式不是特别友好,存在许多不足,只是为了满足项目需求,望大佬们谅解。

Marching | 园豆:203 (菜鸟二级) | 2019-11-29 16:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册