似乎很多同学这学期都选择了图形学,但图形学肯定会有一个大作业让每个同学写一个类似Windows绘图的软件,我刚刚写好,其中有些小技巧,和大家分享一下。
1、如何实现鼠标拖动画图形 即用鼠标单击一下绘图板 然后拖动画出一条线或其他图形。
我找到两个方法。1、首先我们将一个位图作为picturebox的image属性。如:pictureBox1.Image = bitmap;这样没当我刷新的时候就可以将pictureBox1的内容设为bitmap。然后我们在mousemove的过程中将将直线画到picturebox的Graphics上。每次画之前都调用。 pictureBox1.Refresh(); 最后我们在mousedown事件中将最后的位图绘制到bitmap的Graphics上。再次调用 pictureBox1.Refresh(); 2、我们可以将绘制的图形存入一个队列中当需要刷新的时候,将队列里面的元素全部在绘制一边,这样还可以实现undo操作。
2、.net中画点
我写作业时好像发现.net中没有花点的函数,于是搜了一下,找到两个比较简单的方法。1.通过填充矩形函数g.FillEllipse(pen.Brush, X, Y, width, width);。2、直接改写Bitmap中的像素的颜色。 bitmap.SetPixel(p.X, p.Y, color);
3、填充图形
这个我觉得在作作业中最有意思,因为我的算法快了7倍。
呵呵 第一次我用种子填充算法直接的绘制,可是过了十五秒钟才把我要的图象填充完毕(200*200的矩形)。
第二次我改用扫描线法,将速度提高到5秒。可是我还是不能忍受填充的速度。
最后,我终于发现真正慢的原因是.net 中Bitmap的getPixel()和setPixel().两个方法,因为我将整个图形的背景用这两个方法设成白色需要很