0

所以我们有一个图像。我们想画一条必须看到的线。那么如何绘制一条相对于每个点应绘制的表面的颜色反转的线条呢?

4

3 回答 3

3

XOR 技巧是微不足道的不同。不过,它在视觉上并不是最明显的,只是因为它完全忽略了人眼的工作方式。例如,在浅灰色上,饱和的红色在视觉上非常明显。

您可能希望将颜色转换为 HSV 并检查饱和度 S。如果低(灰度),则绘制一个红色像素。如果饱和度高,则色调相当明显,白色或黑色像素会突出。如果原始像素具有高 V,则使用黑色 (V=0);如果原始像素的 V 值较低(深饱和色),则使用白色

您可以使用前面建议的 LineIterator 方法。

(顺便说一句,XOR 技巧也有非常糟糕的情况。0x7F ^ 0xFF = 0x80。这很难看)

于 2010-11-24T14:31:21.620 回答
2

手动使用LineIterator和 XOR 每个像素的颜色值。

于 2010-11-24T11:46:01.400 回答
1

这是我的想法,我不是 C++ 开发人员,但应该可以将线条画成单独的图像,然后模仿反转混合模式......基本上你需要得到“负面”/像素后面的反转颜色,您可以通过从最大颜色值中减去线条下方的颜色来获得。

就像是:

uint invert(uint topPixel, uint bottomPixel) {
            return (255 - bottomPixel);
}

不确定颜色是从 0 到 255 还是从 0.0 到 1.0,但希望这能说明这个想法。

于 2010-11-24T11:45:23.010 回答