区域泛洪填充算法法可以填充圆吗

本文的目的是展示一种适应 出色嘚QuickFill算法它可以与 GDI+ 和. NET 框架一起工作。

首先我承认我没有花太多时间来完全理解john算法 当我看到递归洪水泛洪填充算法法的优点是"即使是初學者程序员也能轻松实现"时,我认为如果发现我不能找到高级程序员版本可能会对我的精神造成不利影响。 所以我把文章评级为'5'然后。

我回到文章上几次阅读评论 我有一个评论引发了我自己的问题: 如何使用 GDI+ 应用程序的算法。 GDI+ 没有泛洪填充能力这对于我们开始使用這种功能的程序员来说非常无用。

所以我着手让john和 GDI+ 和. NET 框架一起工作 这里示例不适合约翰的算法,使用本机 WIN32 GDI+ API尽管这可能会完成。

首先峩不想搞乱john的代码。 我担心如果我甚至看到了错误的算法,它会失败而且我不能修复它。 但我希望它能在. 填充组件为了使用框架,為什么我们要使用 也许如果我们正在推出基于,的更复杂的mfc代码但今天。

这可能是一个MFC应用程序)的便利特性

有了这些知识我就开始設计一个计划。 首先我将编写自己的CDibBitmap 来实现与原始接口相同的接口,以便 CQuickFill 能够继续使用它 其次,我将去掉MFC代码 这样做更容易: 使用原始 CDibBitmap 出现的图片,唯一剩余的MFC代码是 QuickFill

当然如果我没有确定约翰的代码,我可以进入更改他的来源来纠正这个问题 另一个好处:如果John对怹的课程做了任何小的改变,我不必再重新应用任何

CDibBitmap 类需要实现与旧 CDibBitmap 相同的接口,并且需要对 GDI+ 位图执行操作 原始的CDibBitmap 类指定并实现了許多成员方式,比我想实现的要多 幸运的是,消费 CQuickFill 类只调用了大约 10个而且它们相对简单。 这个实现最有趣的方面是如何对像素数据启鼡快速读和写访问 在由请求位深度格式确定的布局中,GDI+ Bitmap类公开了一个方法 LockBits()该方法返回指向原始位图数据的array的指针。 这与 GDI API GetDIBits() 类似这是原來的CDibBitmap 类所使用的。 来确保相应的UnlockBits() 调用 在这种情况下,客户端是 CQuickFill它的逻辑是围绕 GetDIBits() 构建的,它不需要相应的"解锁"方法

注意,这些数据假萣数据是 32bpp 格式因为这是在早期调用 LockBits() 中指定的。 注意error错误检查 在你自己的风险中使用这里代码。

我将这作为一个例子说明如何使用现囿的C++ 代码并在. NET 应用程序( 在示例中,C# Windows 窗体应用程序) 中使用它 实际上,你可能希望在解决方案中更加健壮

另外请注意,这里示例实现加载程序锁解决方法如 中所讨论的。 这种解决方法需要初始化组件并由客户端初始化

}

我要回帖

更多关于 泛洪填充算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信