这是我写的方法:point 是所截图的位置,size是大小
可是现在大小没错,但位置有些出入,望高手指点
public void DrawScreen(Point point,Size size)
{
//获得当前屏幕的大小
Rectangle rect = new Rectangle();
rect = Screen.GetWorkingArea(this); //创建一个以当前屏幕为模板的图象
Graphics g1 = this.CreateGraphics();
Image MyImage = new Bitmap(size.Width, size.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc();
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获 (主要不知道这几个参数的作用)
BitBlt(dc2, 0, 0, size.Width, size.Height, dc1, 0, 0, 13369376);//13369376
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
if (DialogResult.OK == this.saveFileDialog1.ShowDialog())
{
MyImage.Save(this.saveFileDialog1.FileName, ImageFormat.Bmp);
MessageBox.Show("当前屏幕已经保存为" + this.saveFileDialog1.FileName + "文件!");
} }
可是现在大小没错,但位置有些出入,望高手指点
public void DrawScreen(Point point,Size size)
{
//获得当前屏幕的大小
Rectangle rect = new Rectangle();
rect = Screen.GetWorkingArea(this); //创建一个以当前屏幕为模板的图象
Graphics g1 = this.CreateGraphics();
Image MyImage = new Bitmap(size.Width, size.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc();
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc();
//调用此API函数,实现屏幕捕获 (主要不知道这几个参数的作用)
BitBlt(dc2, 0, 0, size.Width, size.Height, dc1, 0, 0, 13369376);//13369376
//释放掉屏幕的DC
g1.ReleaseHdc(dc1);
//释放掉Bitmap的DC
g2.ReleaseHdc(dc2);
if (DialogResult.OK == this.saveFileDialog1.ShowDialog())
{
MyImage.Save(this.saveFileDialog1.FileName, ImageFormat.Bmp);
MessageBox.Show("当前屏幕已经保存为" + this.saveFileDialog1.FileName + "文件!");
} }
解决方案 »
- 数据库到底在开发怎么使用的
- c#中 select * ..... where id = '123'中,怎么获取这个*里面有多少组数据?
- C# winforms 问题
- C#中,如何读取ORACLE的表中的BLOB数据?
- 如何将word嵌入我的WindowsForm界面? 实现就像在VB中通过OLE方法在界面中嵌入Word的效果
- 高深问题
- TreeView的菜鸟问题...
- 如何用C#编写:获取网卡的MAC地址
- 在使用DataAdapter的Update,比如更新数据库10条记录,如果在第5条更新发生错误,那么前面4条信息,是不是要手动去处理rollback呢
- 对于WinForm的MDI程序来说,怎样获得当前子窗体的属性,比如说:子窗体的窗体名称
- 请问QQ聊天界面的字体和表情是用什么控件来做的。。
- 初学c#,这个对吗?(编写一个Hit事件触发Escape方法。)
怎么能一样呢
主要不知道BitBlt参数的含义
昨天在if里改为
if (DialogResult.OK == this.saveFileDialog1.ShowDialog())
{
RectangleF ps = new Rectangle(point, size);
Bitmap bitmap= new Bitmap(MyImage);
//将原图按位复制到newImage
Image newImage= bitmap.Clone(ps, PixelFormat.Format16bppRgb555);
newImage.Save(this.saveFileDialog1.FileName, ImageFormat.Bmp);
MyImage.Dispose();
newImage.Dispose();
}可出来的效果还是不行