`
butnet
  • 浏览: 89140 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

封闭区域填充,太慢了...

阅读更多
今天用JAVA写一个封闭图形的填充,
我采用种子填充算法,
/**
*@param x 初始点x坐标
*@param y 初始点y坐标
*@param ccolor 填充颜色
*@param bcolor 初始点颜色
*@param image 图形
*/
public void setColor(int x,int y,Color ccolor,Color bcolor,java.awt.image.BufferedImage image){
ArrayList list=new ArrayList();//边界保存,保存下一次要处理的
//装入原始点
list.add(x);
list.add(y);
while(list.size()!=0){
//填充边界颜色
for(int i=0;i
//if(image.getRGB(list.get(i),list.get(i+1))!=ccolor.getRGB())
image.setRGB(list.get(i),list.get(i+1),ccolor.getRGB());
}
int size=list.size();
int byLength=0;
while(size>0){
int tempx,tempy;
tempx=list.get(0);
tempy=list.get(1);
if(tempx>0){
if(image.getRGB(tempx-1, tempy)==bcolor.getRGB()){//取左边点
list.add(tempx-1);
list.add(tempy);
byLength++;
//System.out.println("("+(tempx-1)+","+tempy+")");
}
}
if(tempy>0){
if(image.getRGB(tempx, tempy-1)==bcolor.getRGB()){//取上边点
list.add(tempx);
list.add(tempy-1);
byLength++;
//System.out.println("("+tempx+","+(tempy-1)+")");
}
}
if(tempx
if(image.getRGB(tempx+1,tempy)==bcolor.getRGB()){//取右边点
list.add(tempx+1);
list.add(tempy);
byLength++;
//System.out.println("("+(tempx+1)+","+tempy+")");
}
}
if(tempy
if(image.getRGB(tempx, tempy+1)==bcolor.getRGB()){//取左边点
list.add(tempx);
list.add(tempy+1);
byLength++;
//System.out.println("("+tempx+","+(tempy+1)+")");
}
}
if(byLength==0)return;
list.remove(0);
list.remove(0);
size-=2;
}
if(byLength==0)break;
}
}
//运算速度太慢了.
//不知道...windows那个画图的填充是怎么实现的,觉得它的速度不错.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics