CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

ms的画图程序是怎么实现填充的?

楼主xdljf(hunter)2005-06-09 11:26:46 在 VC/MFC / 界面 提问

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

相关问题

  • 在VB中如何实现“画图”程序中快速填充多边形颜色
  • 画图程序出错
  • 做一个类似Ms 画图的程序,如何消除屏幕闪烁?
  • 一个画图程序的问题.......
  • 如何外挂画图程序?
  • 寻画图程序源码,谢谢
  • 谁能给我一个画图程序?
  • 谁教我做画图程序?
  • 画图程序,消除闪烁?
  • 求画图程序DrawTool的源代码!

关键词

  • 算法
  • 区域
  • api
  • 填充
  • 画图
  • 实现
  • getpixel
  • rgb
  • ms
  • brush

得分解答快速导航

  • 帖主:xdljf
  • icansaymyabc
  • fisker0303
  • liuyan4794
  • devinside
  • goodboyws
  • ukyo1
  • wangjia184
  • zengwujun
  • kdou

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo