我正在编写一个像MS Paint这样的绘图程序。画布是一个面板,并放置在另一个面板中,因此我可以使用滚动条。对于填充操作,我实现了洪水填充算法。为了存储图形,我创建了一个位图,并在绘制事件时将该位图绘制到了屏幕上。
如果我按原样保留画布的Dock属性(即:无),它将留下一个未填充的三角形区域。如果将Dock属性更改为Fill,该算法将正常运行,但是在这种情况下,我将无法再控制画布大小。在这两种情况下,我的填充算法都没有碰到画布(它处理了我之前创建的位图),Dock如何影响我的填充结果?
下面是简化代码和生成的图像。每个程序产生两个图像:填充操作之前和填充后之后的位图。
答案 0 :(得分:0)
只是发现我的索引计算错误:我使用bmpData.Stride
而不是使用img.Width
,因此我的代码访问了包含未初始化数据的图像填充。画布面板只是偶然地更改了该数据。另一个错误是按颜色字节顺序排列,我使用的是红绿色蓝色,而实际上是蓝绿色红色。