开发环境VC2008+WinXP。1、对一个256色的Bitmap做填充处理,用到了哪些函数?
2、需要获取连通区域吗,怎么做?

解决方案 »

  1.   

    就是将鼠标时,将鼠标点的色码及与其连通的相同色码,填充为指定的色码。
    和windows画图的“用颜色填充”功能一样。
      

  2.   

    是的啊。
    我现在是用一个递归算法找出连通区域的CRgn,然后用FillRegion来填充,是GDI+的。
    但是这样太慢了啊,怎样才能提高效率呢?
    为什么画图的就这么快呢。
      

  3.   

    弱弱滴问一句,FloodFill不能用么~
      

  4.   

    FloodFill没用过,明天试试,谢谢。
      

  5.   

    看看opencv的cvDrawContours函数吧
      

  6.   

    我用的是Graphics,按这样调用ExtFloodFill(graphics->GetHDC(), ptMouse.x, ptMouse.y, penColor.ToCOLORREF(), FLOODFILLBORDER);是返回失败的,怎么办啊
      

  7.   

    八领域搜索算法http://www.docin.com/p-42430337.html
      

  8.   


    我现在就差不多是这样的,但是速度很慢啊。
    和mspaint的“用颜色填充”完全不是一个数量级的。另外,FloodFill该怎么传入HDC呢,我现在是一个Graphics(Image *)的数据。
      

  9.   

    各位XDJM们,还有好办法吗。
    FloodFill的HDC参数必须是dc的吗?
      

  10.   

    有必要用递归吗??你就搜索你点的位置的8或4邻域的联通区域,然后把邻域的像素点设置成你设定的颜色就可以了。很快的。FloodFill也是可以的,你绘图不用DC怎么绘?
      

  11.   

    不是直接在dc上做的处理,大概代码是这样的:
    Bitmap *pBitmap;
    ...    // 获取PixelFormat32bppARGB的图像
    Graphics graphics(pBitmap);
    graphics.SetInterpolationMode(InterpolationModeNearestNeighbor);
    graphics.SetSmoothingMode(SmoothingModeHighSpeed);
    graphics.TranslateTransform(left, top);
    pObj->Draw(&graphics);    // 这里就是需要填充的处理函数
      

  12.   

    填充算法是图形算法里面比较复杂的,CRgn只能很小的区域,不然慢的厉害,大了几乎无法忍受。
    要想快方法也有,不过复杂性就高多了。
    找一块空闲的内存区域,全部填充背景色,然后用前景色将CRgn的边界画进去。然后自己判断是区域内还是区域外,用漫泛法填充,或者用代数边界法,具体算法找计算机图形学的书就有。
    填充完将处理好的内存copy回去就可以了。
      

  13.   

    我的图形大小也不是很大,具体跟踪过,主要就是慢在产生CRgn这一步(用递归和堆栈都一样),填充过程还是快的。
    所以现在的问题就是,一是优化生成CRgn的过程,二是更改填充过程,希望各位能帮帮忙...
      

  14.   

    大家是用什么办法做的呢,就是对一个Bmp文件做连通区域的填充,需同时考虑在一个选择框的范围内处理。
    谢谢啦。