用C#实现的小截屏软件

第一次写博客,文笔较差,将就看吧

日常生活中会经常使用到截屏功能,使用最多的无非就是Windows自带的截图工具、QQ截图和PrintScreen键,但要达到截图到word或保存到文件,需要鼠标选择多次。比如我们想截图并将图插入到Word中,不需要保存图片,我们希望直接点击截图按钮,选择截图区域,Ctrl+V简单三步就行了(感觉说了好多废话),切入正题。

1.基本功能

选择屏幕区域后提醒你保存所截的图片,或直接将所截图片放到剪切板里(以便用Ctrl+V粘贴)。

2.界面设计

界面很简单,无非就是可实现以上功能的两个按钮和其他文字,见图:

界面的属性需要注意几个问题:

1)窗口设为固定大小,并禁用窗口最大化(因为我们不希望窗口大小会变)

2)窗口最好设为顶置

3)把两个文字label和两个按钮都放到一个panel里,以便于后面程序对控件属性的操作

4)那么大的按钮,最好改变一下它的样式,还可以设置背景为gif动图

3.功能实现

那么关键问题来了,怎么截图呢?见下图

原理其实很简单,就是在点击按钮后,窗口变为全屏覆盖在屏幕最上方,并变为半透明,使你能看到窗口下面的屏幕内容,然后拖动鼠标(此时其实是在软件的主窗口上拖动,这样就方便程序捕捉鼠标坐标了),根据坐标在屏幕上绘制选框,接着松开鼠标后,根据鼠标落下和松开的坐标,截取屏幕,最后保存或复制到剪切板。

4.敲代码吧

  1: using System;
  2: using System.Windows.Forms;
  3: using System.Drawing;//绘图要用
  4: using System.Threading;//延时函数要用
  5:
  6: namespace 截屏
  7: {
  8:     public partial class Form1 : Form
  9:     {
 10:         bool mouseDown = false, havePainted = false;
 11:         Point start, end;
 12:         Point start1, end1;
 13:         Size size = new Size(0, 0);
 14:         bool saveFile = true;
 15:         public Form1()
 16:         {
 17:             InitializeComponent();
 18:         }
 19:
 20:         private void button1_Click(object sender, EventArgs e)
 21:         {
 22:             ReadyToCaptrue();
 23:             saveFile = true;
 24:         }
 25:
 26:         private void Form1_MouseDown(object sender, MouseEventArgs e)
 27:         {
 28:             start = GetRealPoint(e.Location);
 29:             mouseDown = true;
 30:         }
 31:
 32:         private void Form1_MouseUp(object sender, MouseEventArgs e)
 33:         {
 34:             if (size.Width != 0 && size.Height != 0)
 35:             {
 36:                 ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
 37:                 havePainted = false;
 38:             }
 39:             end = GetRealPoint(e.Location);
 40:             if (start.X > end.X)
 41:             {
 42:                 int temp = end.X;
 43:                 end.X = start.X;
 44:                 start.X = temp;
 45:             }
 46:
 47:             if (start.Y > end.Y)
 48:             {
 49:                 int temp = end.Y;
 50:                 end.Y = start.Y;
 51:                 start.Y = temp;
 52:             }
 53:             this.Opacity = 0.0;
 54:             Thread.Sleep(200);
 55:             if (end.X - start.X > 0 && end.Y - start.Y > 0)
 56:             {
 57:                 Bitmap bit = new Bitmap(end.X - start.X, end.Y - start.Y);
 58:                 Graphics g = Graphics.FromImage(bit);
 59:                 g.CopyFromScreen(start, new Point(0, 0), bit.Size);
 60:                 if (saveFile)
 61:                 {
 62:                     SaveFileDialog saveFileDialog = new SaveFileDialog();
 63:                     saveFileDialog.Filter = "png|*.png|bmp|*.bmp|jpg|*.jpg|gif|*.gif";
 64:                     if (saveFileDialog.ShowDialog() != DialogResult.Cancel)
 65:                     {
 66:                         bit.Save(saveFileDialog.FileName);
 67:                     }
 68:                 }
 69:                 else
 70:                 {
 71:                     Clipboard.SetImage(bit);
 72:                 }
 73:                 g.Dispose();
 74:             }
 75:             this.WindowState = FormWindowState.Normal;
 76:             this.FormBorderStyle = FormBorderStyle.FixedSingle;
 77:             panel1.Visible = true;
 78:             this.Opacity = 1;
 79:             mouseDown = false;
 80:         }
 81:
 82:         private void Form1_MouseMove(object sender, MouseEventArgs e)
 83:         {
 84:             if (mouseDown)
 85:             {
 86:                 if (size.Width != 0 && size.Height != 0 && havePainted)
 87:                 {
 88:                     ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
 89:                 }
 90:                 end1 = GetRealPoint(e.Location);
 91:                 size.Width = Math.Abs(end1.X - start.X);
 92:                 size.Height = Math.Abs(end1.Y - start.Y);
 93:                 start1.X = (start.X > end1.X) ? end1.X : start.X;
 94:                 start1.Y = (start.Y > end1.Y) ? end1.Y : start.Y;
 95:
 96:                 if (size.Width != 0 && size.Height != 0)
 97:                 {
 98:                     ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
 99:                     havePainted = true;
100:                 }
101:             }
102:         }
103:
104:         private void button2_Click(object sender, EventArgs e)
105:         {
106:             ReadyToCaptrue();
107:             saveFile = false;
108:         }
109:
110:         private void Form1_Load(object sender, EventArgs e)
111:         {
112:
113:         }
114:
115:         private void ReadyToCaptrue()
116:         {
117:             this.Opacity = 0.1;
118:             panel1.Visible = false;
119:             this.FormBorderStyle = FormBorderStyle.None;
120:             this.WindowState = FormWindowState.Maximized;
121:         }
122:
123:         private Point GetRealPoint(Point position)
124:         {
125:             position.X -= 0;
126:             position.Y -= 0;
127:             return position;
128:         }
129:     }
130: }
131: 

 

时间: 2024-10-08 07:08:05

用C#实现的小截屏软件的相关文章

ubuntu系统使用之6:截屏软件KSnapshot

KSnapshot是KDE集成桌面环境自带的截图工具,不过在GNOME集成桌面环境下也可以安装和使用它.可以使用apt-get命令来安装它.假设使用命令行方式来安装,打开一个GNOME终端窗口,在终端窗口中输入如下命令: 1) sudo apt-get install ksnapshot 命令执行后,将在线下载并安装KSnapshot.安装完毕后,在菜单"应用程序"→"图像"下找到"KSnapshot"项,即可使用这个功能强大的截屏软件了 2)K

Snipaste强大离线/在线截屏软件的下载、安装和使用

步骤一: https://zh.snipaste.com/  ,去此官网下载. 步骤二:由于此是个绿色软件,直接解压即可. 步骤三:使用,见官网.ttps://zh.snipaste.com  按F1开始截屏 感谢下面哥的精彩微信文章 http://mp.weixin.qq.com/s?__biz=MzIwNzYwODYwMw==&mid=2247483903&idx=1&sn=02121fe920320bbe7b2fae012a18e70a&chksm=970e8f8ba

团队软件开发_基于windows下截屏软件关于NABC框架的特点

经过我们小组数次的激烈讨论,就自己的能力和时间而言,我们小组的初步的计划是开发一款基于windows下的截图软件. 关于这个软件的功能,我们初步的想法如下: 1.能在windows下后台运行,有相应的快捷键,以便随时随地的截取用户所需要的信息: 2.在截屏开始钱前有一个关于形状的选择(如矩形,圆形等),当然,还有我们小组自认为比较好的随意形状的截图: 3.当随意形状截屏时,此软件还有磁性吸附轮廓的功能,以避免鼠标使用时截屏的轮廓不合理情况:

python+tkinter+pyautogui 自制截屏软件

目标:虽然类似QQ等软件带有截屏功能,但还是感觉自造的好 使用说明:将以下代码保存为如:截屏.pyw    并发送到 桌面快捷方式  然后修改快捷方式的属性 增加快捷键. 现在可以用快捷键启动脚本截屏了. 然而:win10自带的  “Win+Shift+S”组合键便可进入截屏模式 代码: #! /usr/bin/env python # -*- coding: utf-8 -*- import tkinter as tk import pyautogui root = tk.Tk() root.

IMAC双系统WIN下截屏快捷键

一.Mac下有自带的截图功能 新Mac用户根本不必麻烦去寻找截屏软件,默认快捷键是 全屏幕截图:Command+Shift+3 区域截图:Command+Shift+4 随后按 Space(空格) 可以选定窗口截图 Mac下屏幕快照快捷键可以自定义设置: 系统偏好设置——键盘——键盘快捷键 Mac下截图默认保存在桌面上,格式为PNG: 二.苹果电脑在Win系统中,由于Macbook键盘上是没有Print Screen按键的 大家可以用如下方法截图: 全屏截图:fn+shift+F11 窗口截图:

如何在Windows7下截屏。

看到大家经常用手机拍电脑桌面,当然这不是不可以,但是电脑本身自己就有截屏的操作,为什么还要用手机拍照呢?手机拍照的缺点:一.上班用手机拍照,心里是不是有点慌?怕被抓住?二.手机拍照,手机像素先不论,一般拍的也不清楚,有的时候还会出现残影,看你照片的人眼睛都瞎了呢.三.用手机拍照会让人认为是电脑小白,因此要高端起来.希望大家心里能有个Balance.以上纯属个人观点,欢迎指正交流. 那么如何截屏呢?截屏首推截屏软件,这个话自行百度即可.(像自带截屏功能的QQ等也算在里面)如果不能装软件的话,也有办

自己制作精美的App Store 软件截屏

当用户搜索到App的时候,一般都会先看截图,如果截图效果不好,可能用户就不会下载. 不想自己辛苦写的认为还不错的软件,因为截图的原因,而降低了很多下载量吧. 轻轻松松做出这样高大上的截屏效果来. Screenshot Maker Pro (iOS – Free to Try) Promotee (OSX – $4.99 USD) PlaceIt (Website – Free/Paid) Adobe Photoshop CC (OSX/PC – Free Trial/$9.99-$19.99 p

安卓截屏小例子

距离上一次写博文大概有一年半了,最近时间比较充裕,先分享一个截屏小例子. 核心类做了两步操作,获取到当前应用截屏view,第二步保存到手机sd卡上.

Android自动截屏小脚本

Android自动截屏小脚本(脱离手工操作,自动保存到PC上) @echo offecho * 截图文件将保存在 E:\takeshont下,以当前日期+时间命名.echo =================================================echo * 如果在停止截图后,无法删除或者上传,可到任务管理器中删除adb.exe进程echo =================================================================