winform 截屏

已经注册博客好久,一直由于工作原因没有打理。今天在网上看了一个截屏的方法思想,感觉不错。就按照这个思路和网友的代码进行整理编写了一个小工具。第一次发博客不足之处,还请高手们批评指正。

废话就不多说放了,代码如下:

截取全屏代码:

View Code
            try
{
this.Hide();
Rectangle bounds
= Screen.GetBounds(Screen.GetBounds(Point.Empty));
Bitmap bitmap
= new Bitmap(bounds.Width, bounds.Height);
Graphics g
= Graphics.FromImage(bitmap);
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);

System.Threading.Thread.Sleep(
50);

SaveFileDialog saveFileDialog
= new SaveFileDialog();
saveFileDialog.Filter
= "bmp files (*.bmp)|*.bmp";
saveFileDialog.Title
= "保存文件";
saveFileDialog.ShowDialog();
bmpPath
= saveFileDialog.FileName;
if ("" != bmpPath)
{
bitmap.Save(bmpPath, ImageFormat.Bmp);
}
bitmap.Dispose();
this.Show();
}
catch (System.Exception ex)
{
MessageBox.Show(
"抓图失败!");
this.Show();
}

frmChildScreen 窗体代码如下:

View Code
        private void frmChildScreen_Load(object sender, EventArgs e)
{
this.Cursor = Cursors.Cross;

this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true);
this.UpdateStyles();
originBmp
= new Bitmap(this.BackgroundImage);
}

private void Catch_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (!catchStart)
{
catchStart
= true;
startPoint
= new Point(e.X, e.Y);
}
}
}

private void Catch_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
}

private void Catch_MouseMove(object sender, MouseEventArgs e)
{
if (catchStart)
{
Bitmap destBmp
= (Bitmap)originBmp.Clone();
Point newPoint
= new Point(startPoint.X, startPoint.Y);
Graphics g
= Graphics.FromImage(destBmp);
Pen p
= new Pen(Color.Blue, 1);
int width = Math.Abs(e.X - startPoint.X), height = Math.Abs(e.Y - startPoint.Y);
if (e.X < startPoint.X)
{
newPoint.X
= e.X;
}
if (e.Y < startPoint.Y)
{
newPoint.Y
= e.Y;
}
catchRect
= new Rectangle(newPoint, new Size(width, height));
g.DrawRectangle(p, catchRect);
g.Dispose();
p.Dispose();
Graphics g1
= this.CreateGraphics();
g1
= this.CreateGraphics();
g1.DrawImage(destBmp,
new Point(0, 0));
g1.Dispose();
destBmp.Dispose();
}
}


private void Catch_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (catchStart)
{
catchStart
= false;
catchFinish
= true;
}
}
}

private void Catch_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && catchFinish)
{
if (catchRect.Contains(new Point(e.X, e.Y)))
{
Bitmap bitmap
= new Bitmap(catchRect.Width, catchRect.Height);
Graphics g = Graphics.FromImage(bitmap);
g.DrawImage(originBmp,
new Rectangle(0, 0, bitmap.Width, bitmap.Height), catchRect, GraphicsUnit.Pixel);

SaveFileDialog saveFileDialog
= new SaveFileDialog();
saveFileDialog.Filter
= "bmp files (*.bmp)|*.bmp";
saveFileDialog.Title
= "保存文件";
saveFileDialog.ShowDialog();
bmpPath
= saveFileDialog.FileName;
if ("" != bmpPath)
{
bitmap.Save(bmpPath, ImageFormat.Bmp);
}
bitmap.Dispose();
this.DialogResult = DialogResult.OK;
this.Close();
}
}
}

截取局部屏幕代码如下:

View Code
            try
{
this.Hide();
Rectangle bounds
= Screen.GetBounds(Screen.GetBounds(Point.Empty));

Thread.Sleep(
50);
frmChildScreen CatchForm
= new frmChildScreen();
Bitmap catchBmp
= new Bitmap(bounds.Width, bounds.Height);
Graphics g
= Graphics.FromImage(catchBmp);
g.CopyFromScreen(
new Point(0, 0), new Point(0, 0), new Size(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height));
CatchForm.BackgroundImage
= catchBmp;
if (CatchForm.ShowDialog() == DialogResult.OK)
{
this.Show();
}

}
catch (System.Exception e)
{
MessageBox.Show(
"抓图失败!");
this.Show();
}
posted @ 2011-07-20 19:21  Aland.liu  阅读(1556)  评论(0)    收藏  举报