最近按照老师的要求需要截取主窗口的图片保存在辅助窗口,废话不说,查看网上的相关资料和MSDN有如下收获,截图如下,
我的代码还有其他功能,这个截图只是个其中一个很小的部分,我就不贴demo献丑,但是我吧主要的函数和类贴出来,朋友们可以把这copy过去就没有问题了:
1.WPF本身是没有截屏函数的,我们得借助WinForm(当然肯定有其他办法,不过本人觉得这应该是最快速的办法)
首先通过截屏WinForm的截屏函数把你的bitmap保存下来:
public System.Drawing.Bitmap GetScreenSnapshot()
{
//Rectangle rc = SystemInformation.VirtualScreen;
var bitmap = new System.Drawing.Bitmap((int)canvas1.ActualWidth, (int)canvas1.ActualHeight,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
double y=this.Top + 30 + toolbarTray1.ActualHeight;
double x=this.Left+8;
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
{
g.CopyFromScreen((int)x, (int)y, 0, 0, new System.Drawing.Size((int)canvas1.ActualWidth, (int)canvas1.ActualHeight), System.Drawing.CopyPixelOperation.SourceCopy);
}
return bitmap;
}
2.因为我们用的是WPF,所以你得上面保存下来的bitmap把他加载到WPF的Image中肯定出错,所以我们就必须得吧这个转化到WPF中使用的
废话不多说代码如下:(应为 Imaging.CreateBitmapSourceFromHBitmap为静态方法,不懂MSDN去)
public static class btMapSource
{
public static BitmapSource ToBitmapSource(this System.Drawing.Bitmap bmp)
{
BitmapSource returnSource;
try
{
returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
catch
{
returnSource = null;
}
return returnSource;
}
}
3.我也不是一下就得到的,得感谢这个:http://www.cnblogs.com/zhouyinhui/archive/2010/08/20/1804762.html
但是我要的就是一个简单截屏的功能,所以只用到了一部分,希望一起进步!