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实现截图功能
- WinForm实现为TextBox设置水印文字功能
- 基于java的后台截图功能的实现
- WinForm应用程序中的ComboBox实现ReadOnly功能
- 截图功能实现
- JavaScript实现网页截图功能
- 前台JS 实现截图保存功能
- wxPython实现截图功能(一)
- Winform(C#.NET)自动更新组件的使用及部分功能实现(一点改进功能)
- WinForm+C#代码实现控制应用程序自启动功能
- C# WinForm 实现增删改查等功能(Access版) 系列之二-增加
- 用C#实现换肤功能 - winform
- winform不同窗体之间的传值功能实现方案
- VB.NET Winform的一些功能实现
- canvas与html5实现视频截图功能
- C#.NET vs2010中使用IrisSkin4.dll轻松实现WinForm窗体换肤功能
- winform(c#)中实现打印机相关功能
- winform中拖动功能实现技巧
- jquery实现类似淘宝星星评分功能有截图
- Java中实现系统托盘功能(代码全贴,附加运行截图)