public static class ScreenCapturer
{
/// <summary>
/// 全屏截圖,以為jpeg格式創建文件
/// </summary>
/// <param name="path">保存路徑</param>
public static void PrintScreen(string path)
{
using (FileStream fs = new FileStream(path, FileMode.Create))
{
SaveImageInStream(RecScreen, ImageFormat.Jpeg, fs);
fs.Close();
}
}
/// <summary>
/// 全屏截圖,以為jpeg格式創建文件
/// </summary>
/// <returns>壓縮成字節數組</returns>
public static byte[] PrintScreenInBytes()
{
MemoryStream ms = new MemoryStream();
SaveImageInStream(RecScreen, ImageFormat.Jpeg, ms);
ms.Close();
return ms.ToArray();
}
/// <summary>
/// 全屏截圖,返回jpeg文件
/// </summary>
/// <returns></returns>
public static Image PrintScreenImage()
{
return SaveImageInStream(RecScreen, ImageFormat.Jpeg, null);
}
private static Rectangle RecScreen
{
get
{
return new Rectangle(new Point(0, 0), new Size(Screen.PrimaryScreen.Bounds.Width, Screen.AllScreens[0].Bounds.Height));
}
}
/// <summary>
/// 窗體截圖,以為jpeg格式創建文件
/// </summary>
/// <param name="form">截圖窗體</param>
/// <param name="path">保存路徑</param>
public static void PrintForm(Form form, string path)
{
Rectangle r = new Rectangle(form.Location, new Size(form.Width, form.Height));
using (FileStream fs = new FileStream(path, FileMode.Create))
{
SaveImageInStream(r, ImageFormat.Jpeg, fs);
fs.Close();
}
}
/// <summary>
/// 窗體截圖,返回字節數組,文件格式jepg
/// </summary>
/// <param name="form">截圖窗體</param>
/// <exception cref="NullReferenceException">窗體為空</exception>
public static byte[] PrintFormInBytes(Form form)
{
if (form == null)
{
throw new NullReferenceException("截圖窗體對象為空");
}
Rectangle r = new Rectangle(form.Location, new Size(form.Width, form.Height));
MemoryStream ms = new MemoryStream();
SaveImageInStream(r, ImageFormat.Jpeg, ms);
ms.Close();
return ms.ToArray();
}
/// <summary>
/// 窗體截圖,文件格式jepg
/// </summary>
/// <param name="form">截圖窗體</param>
/// <returns></returns>
public static Image PrintForm(Form form)
{
if (form == null)
{
throw new NullReferenceException("截圖窗體對象為空");
}
Rectangle r = new Rectangle(form.Location, new Size(form.Width, form.Height));
return SaveImageInStream(r, ImageFormat.Jpeg,null);
}
/// <summary>
/// 把截圖保存在流並返回圖片
/// </summary>
/// <param name="r">圖形的坐標信息</param>
/// <param name="ifa">圖片格式</param>
/// <param name="s">流</param>
/// <returns></returns>
public static Image SaveImageInStream(Rectangle r, ImageFormat ifa, Stream s)
{
Image myImage = new Bitmap(r.Width, r.Height);
Graphics g = Graphics.FromImage(myImage);
g.CopyFromScreen(r.Location, new Point(0, 0), new Size(r.Width, r.Height));
IntPtr dc1 = g.GetHdc();
g.ReleaseHdc(dc1);
if (s != null)
{
myImage.Save(s, ImageFormat.Jpeg);
}
return myImage;
}
}