您的位置:首页 > 其它

winform实现截图功能

2012-11-16 20:11 183 查看

2012-06-29 15:20

该程序没有使用API函数.....只是简单为了学习一些知识点...

实现原理:在窗体加载时截取整个屏幕保存为图片,在监视鼠标的事件,鼠标左键拖拉一个矩形框,获取此时矩形框的左上角坐标和右下角坐标, 这2个坐标即可为要抠取的图片定位,然后使用Clone方法截取指定图片,并且将该图片复制到粘贴板就OK了。 设置一个窗体,加载时将窗体边框设置为FormBorderStyle.None,并且将窗体最大化,且不再任务栏显示图标,设置不透明程度 自定义(默认值为1.0),并且在此时截取整个图片。

然后监视鼠标按下的事件:在该事件中获取起始点的坐标,

再监视鼠标按键放开的事件, 在该事件中获取鼠标放开的坐标,并在此时从最初截取的图片中抠取刚才2个坐标组成的矩形框范围图片,并保存到粘贴板中即可。

在监视鼠标的移动事件,在该事件中动态获取高和宽,并用当前屏幕的画板使用指定画刷来填充鼠标拖拉的矩形范围框。使得用户可以看到自己的截取范围。

以下为详细代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Imaging;

namespace CutScreen
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

static int x = 0;
static int y = 0;
static int nowX = 0;
static int nowY = 0;
static bool isMouseClick = false;
static Graphics g;
static int width = 0;
static int height = 0;
// static Graphics gi;
static Bitmap bmp;
static string filename="1.jpg";
static bool isOneDown = true;
static Bitmap bm;
private void btnCut_Click(object sender, EventArgs e)
{

}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (isOneDown)
{
x = MousePosition.X;
y = MousePosition.Y;
isMouseClick = true;
isOneDown = false;
}
// MessageBox.Show(MousePosition.X.ToString() + "" + MousePosition.Y.ToString());
}

private void Form1_MouseUp(object sender, MouseEventArgs e)
{

if (isMouseClick)
{
// MessageBox.Show("放开后鼠标的位置:"+MousePosition.X.ToString() + "" + MousePosition.Y.ToString());
nowX = MousePosition.X + 1;
nowY = MousePosition.Y + 1;

Image newImage = Image.FromFile("1.jpg");
Rectangle destRect = new Rectangle(x, y, nowX - x, nowY - y);
bmp = new Bitmap(nowX - x, nowY - y);
bm = ((Bitmap)newImage).Clone(destRect, newImage.PixelFormat);
bm.Save("temp.jpg");
newImage.Dispose();
isMouseClick = false;
}

}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseClick)
{
width = Math.Abs(MousePosition.X - x);
height = Math.Abs(MousePosition.Y - y);
g = CreateGraphics();
g.Clear(BackColor);
g.FillRectangle(Brushes.Navy, x < MousePosition.X ? x : MousePosition.X, y < MousePosition.Y ? y : MousePosition.Y, width + 1, height + 1);
}
}

private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
{

this.Close();
Application.Exit();

}

private void Form1_Load(object sender, EventArgs e)
{

Size size = Screen.PrimaryScreen.Bounds.Size;
Bitmap bmp = new Bitmap(size.Width, size.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(0, 0, 0, 0, size);
//filename = DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".jpg";

//注意以下顺序。
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.ShowInTaskbar = false;
bmp.Save(filename, ImageFormat.Jpeg);
g = this.CreateGraphics();
this.Opacity = 0.5;

}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{

Clipboard.SetImage(bm);//将图片保存到粘贴板,不保存实际文件。
bm.Dispose();
File.Delete("temp.jpg");
File.Delete("1.jpg");
}
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WinForm 截图