现在我正在使用WinForms和GDI +开发一个简单的类似绘画的程序,我遇到了一个简单的问题:
我正在使用面板作为我的画布。 我将所有可绘制的对象(形状,线条和诸如此类的东西)保存在列表中。每次GDI +想要重绘东西时,它都会遍历该列表,在每个对象上调用Draw()。这个方法对我很有用:它很快,看起来很好,每次我都想要Undo()操作我只是在重绘时忽略列表中的最后一个元素。
问题是,现在我想添加Flood Fill功能。我该如何处理这个问题?首先,我发现的大多数FloodFill实现都可以使用位图 - 我没有位图,所有的对象都保存在内存中。我应该只在那个位图上绘制它们吗?在这种情况下,那么呢?我再也看不到管理撤消/重做操作的方法了。我不知道要重绘什么。
我被困住了,我真的指望任何帮助,因为我怀疑我在这里想错了。
答案 0 :(得分:0)
你说你保留了一个可绘制对象列表(形状,线条等等)。
那么,假设您实施了洪水填充,您希望得到的结果是什么?
我看到它的方式,它是Bitmap
或多边形(Point
数组)。
由于泛型填充算法在位图上运行,因此您可以将所有当前对象绘制到临时缓冲区Bitmap
上,然后对此位图进行泛洪填充。生成的填充区域可以保存到Bitmap
,也可以使用其他算法,追溯到多边形(或多边形系列)。
http://en.wikipedia.org/wiki/Flood_fill#Vector_implementations