2017-02-25 35 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; 

这不会是完全相同的颜色为下面的例子,但很相似英寸