我工作中很需要这类函数的源码,但找不到,不知哪位有源码或知道哪有源码(不可以用递归算法,不然填充范围太大就会堆栈益出),定当送分!

解决方案 »

  1.   

    FloodFill(x, y, color);既然对一个点操作,干吗还要FloodFill?是对区域吧?
      

  2.   

    是的,就是类似TURBO C中的那个同名函数,功能是填充含有参数中的点的封闭区域,并填充为color颜色,如果(x,y)点不在任何封闭区域内,则整个屏幕被填充。目的想完成象PhotoShop软件中的油漆桶工具的功能。我是嵌入式环境,所以不可能调用Windows API函数,只有找到源码!
      

  3.   

    google搜FloodFill code
    第一个就是源码.不过是vb的....
      

  4.   

    好东西大家分享(^_^):    算法可由下列四个步骤实现:(1)初始化:堆栈置空。将种子点(x,y)入栈。(2)出栈:若栈空则结束。否则取栈顶元素(x,y),以y作为当前扫描线。(3)填充并确定种子点所在区段:从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xl和xr。(4)并确定新的种子点:在区间[xl,xr]中检查与当前扫描线y上、下相邻的两条扫描线上的象素。若存在非边界、未填充的象素,则把每一区间的最右象素作为种子点压入堆栈,返回第(2)步。typedef struct{ //记录种子点   intx;   int y;} Seed;void FloodFill(int x,int y,COLORREF oldcolor,COLORREF newcolor){    int xl,xr,i;bool spanNeedFill;Seed pt;setstackempty();pt.x =x; pt.y=y;stackpush(pt); //将前面生成的区段压入堆栈while(!isstackempty()){  pt = stackpop();   y=pt.y;   x=pt.x;   while(getpixel(x,y)==oldcolor) //向右填充  {  drawpixel(x,y,newcolor);     x++;  }  xr = x-1;  x = pt.x-1;  while(getpixel(x,y)==oldcolor) //向左填充{  drawpixel(x,y,newcolor);    x--;  }xl = x+1;//处理上面一条扫描线x = xl;y = y+1;while(x<xr){  spanNeedFill=FALSE;    while(getpixel(x,y)==oldcolor)    { spanNeedFill=TRUE;        x++;    }    if(spanNeedFill)    { pt.x=x-1;pt.y=y;      stackpush(pt);      spanNeedFill=FALSE;     }    while(getpixel(x,y)!=oldcolor && x<xr) x++;}//End of while(i<xr)//处理下面一条扫描线,代码与处理上面一条扫描线类似x = xl;y = y-2;while(x<xr){  .... }//End of while(i<xr)}//End of while(!isstackempty())}      堆栈函数需要自己实现。