我正在制作一个小应用程序,其中的孩子可以用颜色填充预设插图。我已经成功地使用洪水填充算法实现了MS-paint风格的油漆桶。但是,在图像元素的边缘附近,像素没有填充,因为这些线是反锯齿的。这是因为当前是否填充的条件是colourAtCurrentPixel == colourToReplace
,这对线上的混合像素不起作用。 (颜色是RGB提示)柔软的油漆桶填充:颜色平等
我想添加一个像Photoshop和其他复杂工具中的平滑/阈值选项,但确定两种颜色之间的相等/距离的算法是什么?
if (match(pixel(x,y), colourToReplace) setpixel(x,y,colourToReplaceWith)
如何match
填写()?
这里,图像(左为的情况下,权所需)
alt text http://www.freeimagehosting.net/uploads/6aa7b4ad53.png
这里是我当前的全码:
var b:BitmapData = settings.background;
b.lock();
var from:uint = b.getPixel(x,y);
var q:Array = [];
var xx:int;
var yy:int;
var w:int = b.width;
var h:int = b.height;
q.push(y*w + x);
while (q.length != 0) {
var xy:int = q.shift();
xx = xy % w;
yy = (xy - xx)/w;
if (b.getPixel(xx,yy) == from) { //<- want to replace this line
b.setPixel(xx,yy,to);
if (xx != 0) q.push(xy-1);
if (xx != w-1) q.push(xy+1);
if (yy != 0) q.push(xy-w);
if (yy != h-1) q.push(xy+w);
}
}
b.unlock(null);
谢谢,我现在做这样的事情。看到我的回答 – 2010-03-31 15:01:59