高分求助,如何对一个封闭的区域进行快速的填充?!(在线恭候各位高手)

rainlight 2002-09-17 03:56:05
我用鼠标在CDC上画了任意的图形,其中有一些是闭合的,如何发现并且填充这些闭合曲线的内部呢?实现如widows画图程序那样的效果!

我用的是递归的方法(以鼠标点击处为开始点,对周围屏幕上的每一个点进行递归),对于较小的图形还可以应付,大的图形速度很慢,而且还经常非法操作!不知是什么原因?!!另外fillinrgn这个函数怎么用?

还望各位高手给于回答!!!先谢谢了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果你太忙,就提供个大概的算法就行了。
...全文
89 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainlight 2002-09-17
  • 打赏
  • 举报
回复
成功了,谢谢xiner!!!我很奇怪这个函数的算法,填充速度好快呀,xiner,你了解它的原理吗?我现在在做一个图形方面的软件,没人教,全靠自学,以后肯定还会在这个论坛上提问的,还请您赐教.另外哪里有bmp与gif,jpg格式转换的资料,现在有一些提供的SDK是要用dll的,我不想用它,有没有其它的办法,还有就是哪里有图形算法方面的好的资料,还请你指点一下.
我的email是linyuliang@sina.com.cn
加分给您,请查收. 还有ACuke
wooingcn 2002-09-17
  • 打赏
  • 举报
回复
用ExtFloodFill吧,最后一个参数指定为FLOODFILLSURFACE,crColor指定连续的要被填充的颜色块,比如你花瓣的颜色块是白色的,可以这样,
dc.ExtFloodFill(point.x,point.y,RGB(255,255,255),FLOODFILLSURFACE);
好了,今天就交流到这里了,我要下班了。
rainlight 2002-09-17
  • 打赏
  • 举报
回复
对,我太激动了,连画刷和边界都忘了定义,可是现在还有一个问题,如果用两种不同颜色的画笔构成一个封闭区域,那么如何填充呢?用FloodFill好象不行也.
wooingcn 2002-09-17
  • 打赏
  • 举报
回复
FloodFill的最后一个参数用来指定边界的颜色值,如果你的边界是黑色的,这里就用RGB(0,0,00).
ACuke 2002-09-17
  • 打赏
  • 举报
回复
Cbrush
rainlight 2002-09-17
  • 打赏
  • 举报
回复
不行呀,我用鼠标的点击点为基点,然后调用这个函数,可是一切变白了呀!

在onlbuttonup中响应的.
CClientDC dc(this);
dc.FloodFill(point.x,point.y,RGB(255,0,0));
wooingcn 2002-09-17
  • 打赏
  • 举报
回复
在OnLButtonDown()函数里
CDC pDC=GetDC();
pDC->FloodFill(point.x,point.y,RGB(255,255,255));
ReleaseDC(pDC);
wooingcn 2002-09-17
  • 打赏
  • 举报
回复
那你知道填充的基点,就可以用FloodFill这个函数啦。
rainlight 2002-09-17
  • 打赏
  • 举报
回复
up
rainlight 2002-09-17
  • 打赏
  • 举报
回复
当然花朵内部是白色的!rgb(255,255,255)
rainlight 2002-09-17
  • 打赏
  • 举报
回复
谢谢xiner,我的问题在于图形是先画好的,比如一个花朵之类的图象,还没有着色,然后鼠标在里面一点,它就充满了想要的颜色.
wooingcn 2002-09-17
  • 打赏
  • 举报
回复
可以这样:
先用填充色填充背景,然后画上你的图形,然后再用floodfill在外面开始填充白色,这样如果被你的图形围起来的区域还是保持着填充色,但是也有一点可能实现起来有些困难:就是FloodFill(x,y,color)中的x,y不好确定,必须保证该点在你的图形外。
rainlight 2002-09-17
  • 打赏
  • 举报
回复
谢谢wind_xu,可是如何建立区域crng呢?它是由一连串点组成的吗?
wind_xu 2002-09-17
  • 打赏
  • 举报
回复
给你点建议
你可以显建立个区域crng再填充该区域。
CDC里有这样的函数

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧