GDI+ 动态绘制直线

来源:互联网 发布:晋华集成电路 知乎 编辑:程序博客网 时间:2024/04/29 11:15
绘制直线的语句其实非常简单:
newgraphics.DrawLine(new Pen(Color.Black), startPoint, new PointF(e.X, e.Y));

但是直接使用DrawLine函数,绘制的直线不能看到绘制过程,所以应该进行优化。

1. 我们在程序中使用一个pictureBox控件

2. 我们在主类中定义需要全局使用的变量和对象

3. 在载入程序函数中初始化对象和变量

4. 按下鼠标,开始绘图操作

5. 在鼠标移动过程中,进行绘图

5. 鼠标抬起,本次绘图结束

难点分析:

之所以在绘制直线的过程中,可以看到绘制的过程,而不会保存过程的痕迹是因为,我们在pictureBox上不断贴“含有最新绘制的直线”的图片,新的一直在覆盖原来的,所以绘图结束看到的就是最后的一副bmp。
我们深入的进行分析:
在鼠标移动事件中,首先执行了,这一步操作定义了一个img图片,这个img图片是originalImg的一个副本。
注意我们在移动鼠标的过程中,MouseMove函数不断在执行。
每次执行MouseMove函数时,都是首先做了一个originalImg的副本bmp,然后画直线,然后绘制在pictureBox上,而且是绘制在pictureBox的同一位置上。因为bmp的尺寸都是一样的,所以会不断复制原来的图片。
那么这个originalImg对象是怎么来的呢?
绘图的一开始,也就是第一次绘制图形时,originalImg是pictureBox对应的原始图片,也就是一个空白的画布。
然后,我们注意到MouseUp函数中有,这一操作使得originalImg取图像finishingImg,finishingImg记录了上次绘图的结果。

所以,在MouseMove函数中的任务可以划分为三部分:
1. 读取上次操作完成的图片
2. 在图片上绘制直线,得到新的图片
3. 把finishingImg替换为新的图片
4. 把显得图片显示到画图板,覆盖上一张
0 0