这是我写的方法: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 + "文件!");
} }
怎么能一样呢
主要不知道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();
}可出来的效果还是不行