这是用C#/Winform/GDI+实现的类似mspaint的画图程序。目前实现了直线、折线、矩形、椭圆、指示箭头等规则形状,这些形状被绘制后,不会像mspaint那样,就动不了了,而是可以再次被编辑,包括旋转、缩放等。
对于没做过这方面程序的人,较好奇的可能就是,你用Graphics类画出一个东西后,怎么样才能重新选中、移动、编辑它?以画一个矩形为例来说明,你如果用Graphics类在一个控件(Control)上画了个矩形,并且把矩形的起点坐标、大小等数据记住,那么用户在控件上单击的时候,你就能判断出用户是否在矩形上单击了,如果是,就表示矩形被选中了,如果用户同时还移动了鼠标,那么就可以根据移动的距离重新计算矩形的起点坐标,然后重新画这个矩形。
这就是爱搜呀画图板用的基本方法。在内部记住各种形状(线段、矩形、椭圆等)的起点坐标、大小、颜色等等信息,在用户移动、旋转形状后,要随即更新这些信息,并重新绘制形状。其它的难点还有不少,比如用户将图像放大,并在放大的视图上绘制新的形状,这时候的处理跟未放大时有什么不同?再如撤销(后退一步)功能,怎么样放弃较后快速操作,返回之前的状态?放大和撤销这两个功能现在还为实现,但是大致思路已经有了。
做这个程序有两个目的,一是把功能写全后,用我之前写的一个控件库来做其UI,然后这个画图程序作为控件库的应用例子。二是做一个实用的截图、画图程序,尽量仿mspaint来做,但要在个方面有所增强。当然了目前爱搜呀画图板还很简单,没有截图功能、不能粘贴位图、不能编辑文字等等,后面会继续完善。