ms的画图程序是怎么实现填充的?
rt,
大家说说ms的画图程序填充功能是怎么实现的,好像用API可以搞定的,不过好久没有接触了,忘了,悉听大侠高论。
问题点数:50、回复次数:14Top
1 楼hushuangyan74()回复于 2005-06-09 11:34:09 得分 0
创建一个画刷,
再选入设备环境,就可以填充了!
CBrush brush,*pOldBrush;;
brush.CreateSolidBrush(RGB(255,0,0));
pOldBrush=pDC->SelectObject(&brush);Top
2 楼xdljf(hunter)回复于 2005-06-09 12:10:26 得分 0
关键是用什么API填充,看一下ms的操作,点击图像上的任一点,就能获得和该点象素值相同的区域,这个区域怎么获得?Top
3 楼icansaymyabc(学习与进步)回复于 2005-06-09 12:22:22 得分 5
没有这种填充API,是用普通填充算法编程实现的。Top
4 楼xdljf(hunter)回复于 2005-06-09 13:26:16 得分 0
那其不是处理速度很慢Top
5 楼fisker0303(天塌了,地陷了,小花狗不见了.)回复于 2005-06-09 13:29:17 得分 5
对,是自己写算法实现的...
其实也有思路,可以实现,只是效率可能不会很高。
GetPixel就可以获得RGB值,遍历图象来找到RGB相同的点,把相临的点组成一个Region......Top
6 楼liuyan4794(青牛)回复于 2005-06-09 13:36:03 得分 5
GetPixel会很慢的
把需要考虑的图片一次性提取过来,再通过内存中内容判断,这样速度很快的Top
7 楼FengYuanMSFT((6.4 被封杀)袁峰 http://fengyuancom.spaces.live.com)回复于 2005-06-09 14:01:10 得分 0
FloodFillTop
8 楼xdljf(hunter)回复于 2005-06-09 14:50:11 得分 0
FloodFill 需要知道border的RGB,好像不行吧
偶不是搞图像处理的,那位有这样的算法,给点思路,怎么根据图像一点的象素值找到连通域,ms的东东挺有技术含量的,天天用paint,想不到还有这么复杂的算法Top
9 楼devinside(诺言)回复于 2005-06-09 18:14:44 得分 5
COLORREF crPoint = pdc->GetPixel ( point ) ;
ExtFloodFill( point.x , point.y , crPoint , FLOODFILLSURFACE ) ;Top
10 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-06-09 18:23:01 得分 5
把位图读出来,直接扫描颜色值,Codeguru上有人给出过一个函数Bitmap2Region之类的名字,你可以参考一下Top
11 楼ukyo1(**)回复于 2005-06-09 18:41:10 得分 10
我想它是用广度搜索的方法来填充的吧。
以前玩QB的时候有一个细节我还记得,那时的机器很慢,屏幕上的图形是由很多小点、短线什么的组成的,然后我调用QB的填充命令,清楚地看到了QB是从填充那一点开始扩张,并绕过那些线什么的,当时不懂算法,后来想想,这个应该就是典型的广度搜索。Top
12 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2005-06-09 21:26:03 得分 5
我看过它的源代码
很吓人的 一个小小的画图居然N多类Top
13 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-06-09 22:41:59 得分 5
单纯用获取RGB的方法应该不行,我估计它是根据跟底色是否相同来判断。
如果一个点与底色不同,我们就认为这个点被着色了,然后根据鼠标点击点向外搜索一个封闭区域。Top
14 楼kdou(蝌蚪)回复于 2005-06-11 20:44:02 得分 5
去搜搜RLE编码,就是行程编码
run length encode,这个速度很快。Top




