2017-02-25 55 views
2

我正在嘗試爲柵格圖像實現填充填充方法。 對於中心像素來說,它很容易並且工作正確,但問題是要填充具有不同顏色的邊框附近的像素。柵格圖像中的智能填充算法

例如,如果在白色背景上繪製黑色圖形,某些邊界像素將具有一種灰色而不是黑色(用於平滑)。

圖像編輯器(如paint.net)在填充期間修復它將這些像素更改爲舊和新之間的中間顏色。在這裏,我用紅色填充的圖形,和灰色像素的紅色漸變成了

img

我需要知道的方法或算法的灰色像素一種顏色如何成爲填補(這裏是紅色的,但可以是任何)使用RGB像素操作。

感謝您的任何幫助。

+0

您可以根據像素顏色'ci',開始像素顏色'c0'和填充顏色'c1'來填充顏色,例如像這樣:'ci = c1 * | ci |/| c0 |',除非您正在處理黑色的顏色。不要忘記處理飽和度(正常化)。你也可以使用差異:'| ci-c0 |/maxdif',其中'maxdif'是填充的閾值.... – Spektre

+0

#Lubch:你的嘗試是什麼? – gpasch

+0

@Spektre謝謝你的回答,但我害怕我沒有抓住你:-(如果我用它爲231; 231; 231像素,我不會得到247; 72; 72也許我不使用你的公式正確(ci = c1 | | ci |/| c0 |) – Lubch

回答

0

因此,對於類似於例子中的效果,我們只需要使用&舊的和新的顏色之間的操作。

對於RGB色彩:

resultColor.R = (byte)(oldColor.R & newColor.R); 
resultColor.G = (byte)(oldColor.G & newColor.G); 
resultColor.B = (byte)(oldColor.B & newColor.B); 

如果RGB色彩詮釋號:

resultColor = oldColor & newColor; 

這不會是完全相同的顏色爲下面的例子,但很相似英寸