知识大全 用C#实现全屏幕截图
Posted 知
篇首语:不怕山高,就怕脚软。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用C#实现全屏幕截图相关的知识,希望对你有一定的参考价值。
用C#实现全屏幕截图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
今天一位同事想写一个全屏幕截图的代码 当然要实现的第一步是能够获取整个屏幕的位图 记得Win API的CreateDC BitBlt等函数可以使用 于是上网查了下 果然屏幕截图用这些函数 但winform已经可以把API都忘记了 所以得寻找一个无Win API的实现方式 综合了网上的实现 以及自己的一些设计 实现思路如下 开始截图时 创建一个与屏幕大小一样的位图 然后用Graphics CopyFromScreen()把屏幕位图拷贝到该位图上 这是很关键的一步 这样所有的操作就都可以在该位图上进行了 而无实际屏幕无关了
int width = Screen PrimaryScreen Bounds Width;
int height = Screen PrimaryScreen Bounds Height;
Bitmap bmp = new Bitmap(width height);
using (Graphics g = Graphics FromImage(bmp))
g CopyFromScreen( new Size(width height));
接下来为了方便在这之上进行截图 有一个很重要的设计实现方式 用全屏幕窗体代替现有真实屏幕 这样就可以把截图过程的所有操作都在那个窗体上实现(该窗体设置成无边框 高宽等于屏幕大小即可) 另外为了显示掩蔽效果(只能正常显示选择的部分屏幕内容 而其实部分用一个如半透明层覆蓋) 就添加一层半透明位置位图 具体代码如下
public partial class FullScreenForm : Form
private Rectangle rectSelected = Rectangle Empty;
private bool isClipping = false;
private Bitmap screen;
private Bitmap coverLayer = null;
private Color coverColor;
private Brush rectBrush = null;
private Bitmap resultBmp = null;
public FullScreenForm(Bitmap screen)
InitializeComponent();
int width = Screen PrimaryScreen Bounds Width;
int height = Screen PrimaryScreen Bounds Height;
coverLayer = new Bitmap(width height);
coverColor = Color FromArgb( );
rectBrush = new SolidBrush(coverColor);
using (Graphics g = Graphics FromImage(coverLayer))
g Clear(coverColor);
this Bounds = new Rectangle( width height);
this screen = screen;
this DoubleBuffered = true;
protected override void OnMouseDown(MouseEventArgs e)
if (e Button == MouseButtons Left)
isClipping = true;
rectSelected Location = e Location;
else if (e Button == MouseButtons Right)
this DialogResult = DialogResult OK;
protected override void OnMouseMove(MouseEventArgs e)
if (e Button == MouseButtons Left && isClipping)
rectSelected Width = e X rectSelected X;
rectSelected Height = e Y rectSelected Y;
this Invalidate();
protected override void OnMouseUp(MouseEventArgs e)
if (e Button == MouseButtons Left && isClipping)
rectSelected Width = e X rectSelected X;
rectSelected Height = e Y rectSelected Y;
this Invalidate();
resultBmp = new Bitmap(rectSelected Width rectSelected Height);
using (Graphics g = Graphics FromImage(resultBmp))
g DrawImage(screen new Rectangle( rectSelected Width rectSelected Height) rectSelected GraphicsUnit Pixel);
this DialogResult = DialogResult OK;
protected override void OnPaint(PaintEventArgs e)
Graphics g = e Graphics;
g DrawImage(screen );
g DrawImage(coverLayer );
PaintRectangle();
protected override void OnPaintBackground(PaintEventArgs e)
protected override void OnKeyDown(KeyEventArgs e)
if (e KeyCode == Keys Escape)
this DialogResult = DialogResult Cancel;
private void PaintRectangle()
using (Graphics g = Graphics FromImage(coverLayer))
g Clear(coverColor);
GraphicsPath path = new GraphicsPath();
path AddRectangle(this Bounds);
path AddRectangle(rectSelected);
g FillPath(rectBrush path);
g DrawRectangle(Pens Blue rectSelected);
public Bitmap ResultBitmap
get return resultBmp;
cha138/Article/program/net/201311/12191
相关参考
用钩子(hook)实现C#的屏幕键盘效果 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 要实现一
C#获取屏幕分辨率 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSystemWind
C#中用钩子(hook)实现的屏幕键盘 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 要实现一个
C#用回溯法找出n个自然数中取r个数的全排列 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 回溯
目前知道有两种方法画多边形GraphicsPath但是用画多边形的方式画三角形不太好老画不正的截图放大就明显了 代码 Pointpoint=ne
Swing全屏幕模式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 也许用到的机会很少但JDK还
你好,请问怎么用手机截图发到百度知道上面?爱应用-Wper:【yinshuang07】为您解答:不同的手机系统,截图方式都不一样的,你在网上查询下你手机型号截图方式,百度发图是点选图片,选择图片储存位
返回某个固定页面functionbk(strUrl)windowlocationhref=strUrl bk(Ajsp) 打开页面就全屏显示<SCRIPTLANGUAGE=JavaScr
C#文件操作全收录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文收集了目前最为常用的C#经
C#窗体全屏功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 窗体全屏的方法 隐藏任务栏设置