保存出的图像为什么全是黑的呀? http://www.c-sharpcorner.com/UploadFile/perrylee/ScreenCapture11142005234547PM/ScreenCapture.aspx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #region 截屏及获取图片代码 //声明一个API函数 [ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ] private static extern bool BitBlt ( IntPtr hdcDest , // 目标 DC的句柄 int nXDest , int nYDest , int nWidth , int nHeight , IntPtr hdcSrc , // 源DC的句柄 int nXSrc , int nYSrc , System.Int32 dwRop // 光栅的处理数值 ) ; private Image GetImage(int iWidth,int iHeight,Control con) { //获得当前屏幕的大小 Rectangle rect = new Rectangle ( ) ; //rect = Screen.GetWorkingArea ( this ) ; rect = Screen.GetBounds(con); //创建一个以当前屏幕为模板的图象 Graphics g1 = con.CreateGraphics(); //创建以屏幕大小为标准的位图 Image MyImage = new Bitmap(iWidth,iHeight,g1) ; Graphics g2 = Graphics.FromImage ( MyImage ) ; //得到屏幕的DC IntPtr dc1 = g1.GetHdc( ) ; //得到Bitmap的DC IntPtr dc2 = g2.GetHdc( ) ; //调用此API函数,实现屏幕捕获 //BitBlt ( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ; BitBlt(dc2,rect.X,rect.Y,iWidth,iHeight,dc1,rect.X,rect.Y,13369376); //释放掉屏幕的DC g1.ReleaseHdc ( dc1 ) ; //释放掉Bitmap的DC g2.ReleaseHdc ( dc2 ) ; return MyImage; } /// <summary> /// 截取指定区域的图片 /// </summary> /// <returns></returns> public Image GetImage() { return this.GetImage(this.dataGridScore.Bounds.Width,this.dataGridScore.Bounds.Height,this.dataGridScore); } /// <summary> /// 将截取图片保存到指定位置 /// </summary> /// <param name="strFileName">文件名称</param> public void SaveImage(string strFileName) { this.GetImage().Save(strFileName,System.Drawing.Imaging.ImageFormat.Jpeg); } /// <summary> /// 将截取图片按指定格式保存到指定位置 /// </summary> /// <param name="strFileName">文件名</param> /// <param name="format">图片格式</param> public void SaveImage(string strFileName,ImageFormat format) { this.GetImage().Save(strFileName,format); } #endregion 摘录:《程序员秘书》--源代码--图形GDI+--拷贝鼠标在内的屏幕private void button1_Click(object sender, EventArgs e){ CaptureScreen().Save("d:\\4.bmp", System.Drawing.Imaging.ImageFormat.Bmp);}private Bitmap CaptureScreen()//拷贝整个屏幕,包括光标{ Bitmap memoryImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);//定义一个位图,大小为整个屏幕大小 Graphics memoryGrahics = Graphics.FromImage(memoryImage);//得到画布 memoryGrahics.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);//拷贝屏幕 return memoryImage;}轻轻松松搞软件开发,详见:http://www.psec.net.cn 打算不编程了,顺便送个自己开发C#的桌面工具给大家。 数据栅格DataGrid的AllowNavigation属性有什么用呀? 关与ADO.NET读EXCEL的数据 我已布署安装程序,如何做到一机一号?谢谢了!! 关于C#操作Word的问题. 【新手求助】如何把 webBrowser里面的网页保存为源代码 C# TreeView节点编辑的问题 “运行时错误”和“编译时错误”有什么区别? VC中的子类化在C#中如何实现? 从打开的子窗口获得返回值? 如何编程实现发送信息给yahoo messenger? 如何修改别人留下的源程序?
//声明一个API函数
[ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]
private static extern bool BitBlt (
IntPtr hdcDest , // 目标 DC的句柄
int nXDest ,
int nYDest ,
int nWidth ,
int nHeight ,
IntPtr hdcSrc , // 源DC的句柄
int nXSrc ,
int nYSrc ,
System.Int32 dwRop // 光栅的处理数值
) ; private Image GetImage(int iWidth,int iHeight,Control con)
{
//获得当前屏幕的大小
Rectangle rect = new Rectangle ( ) ;
//rect = Screen.GetWorkingArea ( this ) ;
rect = Screen.GetBounds(con);
//创建一个以当前屏幕为模板的图象
Graphics g1 = con.CreateGraphics();
//创建以屏幕大小为标准的位图
Image MyImage = new Bitmap(iWidth,iHeight,g1) ;
Graphics g2 = Graphics.FromImage ( MyImage ) ;
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc( ) ;
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc( ) ;
//调用此API函数,实现屏幕捕获
//BitBlt ( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ;
BitBlt(dc2,rect.X,rect.Y,iWidth,iHeight,dc1,rect.X,rect.Y,13369376);
//释放掉屏幕的DC
g1.ReleaseHdc ( dc1 ) ;
//释放掉Bitmap的DC
g2.ReleaseHdc ( dc2 ) ;
return MyImage;
}
/// <summary>
/// 截取指定区域的图片
/// </summary>
/// <returns></returns>
public Image GetImage()
{
return this.GetImage(this.dataGridScore.Bounds.Width,this.dataGridScore.Bounds.Height,this.dataGridScore);
} /// <summary>
/// 将截取图片保存到指定位置
/// </summary>
/// <param name="strFileName">文件名称</param>
public void SaveImage(string strFileName)
{
this.GetImage().Save(strFileName,System.Drawing.Imaging.ImageFormat.Jpeg);
} /// <summary>
/// 将截取图片按指定格式保存到指定位置
/// </summary>
/// <param name="strFileName">文件名</param>
/// <param name="format">图片格式</param>
public void SaveImage(string strFileName,ImageFormat format)
{
this.GetImage().Save(strFileName,format);
} #endregion
private void button1_Click(object sender, EventArgs e)
{
CaptureScreen().Save("d:\\4.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
}
private Bitmap CaptureScreen()//拷贝整个屏幕,包括光标
{
Bitmap memoryImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);//定义一个位图,大小为整个屏幕大小
Graphics memoryGrahics = Graphics.FromImage(memoryImage);//得到画布
memoryGrahics.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);//拷贝屏幕
return memoryImage;
}轻轻松松搞软件开发,详见:http://www.psec.net.cn