我正在製作一個小應用程序,其中的孩子可以用顏色填充預設插圖。我已經成功地使用洪水填充算法實現了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