c# 屏幕快照_用C# 实现截图功能

这个截图控件需要实现的功能包括:截图、绘制矩形、圆形、箭头、线条、文字,还需要可以撤销绘制步骤、保存图形,把QQ截图拥有的功能基本都实现。先来看看最终的效果,然后再来介绍实现过程。

下面来一步步的介绍怎样实现这个截图控件:

1、截图。截图的原理很简单,网上都很多了,还是介绍一下吧。先利用API把整个屏幕拷贝到一个Image中,然后建立一个无标题栏的窗体,把它的背景图设为这个Image就行了。看看截图的函数:

private Image GetDestopImage()

{

Rectangle rect = Screen.GetBounds(this);

Bitmap bmp = new Bitmap(

rect.Width, rect.Height, PixelFormat.Format32bppArgb);

Graphics g = Graphics.FromImage(bmp);

IntPtr gHdc = g.GetHdc();

IntPtr deskHandle = NativeMethods.GetDesktopWindow();

IntPtr dHdc = NativeMethods.GetDC(deskHandle);

NativeMethods.BitBlt(

gHdc,

0,

0,

Width,

Height,

dHdc,

0,

0,

NativeMethods.TernaryRasterOperations.SRCCOPY);

NativeMethods.ReleaseDC(deskHandle, dHdc);

g.ReleaseHdc(gHdc);

return bmp;

}

2、选择截图区域。记录鼠标按下时的坐标,当鼠标移动时得到鼠标所在的坐标,通过这两个坐标就可以得到选择的矩形区域了,通过OnPaint方法画出所选择的区域,当鼠标放开时,就得到最终选取的截图区域了,需要记录下这个区域,下面很多地方需要用到它。

3、调整截图区域的大小和位置。这个实现稍微麻烦些,当鼠标移动的时候,需要判断鼠标是否处于我们设置的调节截图区域大小所在的小矩形内,是的话就改变鼠标指针的样式,提示用户这里按下鼠标可以改变截图区域的大小和位置。当用户在这个地方按下鼠标后,移动鼠标,就可以通过原来记录下来的截图区域和当前鼠标所在的位置调整截图区域的大小了。当放开鼠标后,需要保存这个新的截图区域。

4、实现绘图。利用前面已经实现的绘图工具栏和颜色字体选择控件,可以选择相应的图形进行绘制。简单的说就是根据鼠标的选择区域,绘制相应的图形,实现起来比较复杂,特别是文字和线条的绘制,不是简单的几句话可以介绍出来的,大家还是参照源代码自己体会吧。

5、实现撤销功能。要实现撤销功能,在前面绘图的时候,我们需要记录下每一步绘图完成的时候的动作,撤销绘图就可以返回到上一步,然后重绘。程序中实现了一个简单的操作管理的类OperateManager,可以方便的增加一步操作和移除一步操作。管理类最多纪录1000个操作,当超过1000个时,就会把第一个操作丢掉。看看这个类的完整代码:

internal class OperateManager : IDisposable

{

private List _operateList;

private static readonly int MaxOperateCount = 1000;

public OperateManager()

{

}

public List OperateList

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值