2013-08-02 86 views
-2

说我给函数一个简单的蓝色。然后它应该返回十六进制代码或RGB为深蓝色,并为浅蓝色。我正在使用Java/android颜色函数返回阴影较浅和阴影较暗

+0

那么这里是你的问题的答案,最浅的蓝色是白色的,最黑的是黑色的。 –

+0

如果你尝试,这真的很容易。你有没有尝试过?你有什么尝试? (推断你的问题是“我该怎么做?”) – iamnotmaynard

+1

定义*阴影*。 – OldCurmudgeon

回答

3

一个好方法是将其转换为HSL color space,调整“亮度”组件并将其转换回RGB。

我找到了两个页面,其中提到了可能使用的公式,或者您可以尝试google解决java解决方案。

RGB to HSL

HSL to RGB


另一种选择是使用YUV color space,为其计算更容易。

在YUV色彩空间中,您可以通过更改Y值来调整黑度。

RGB到YUV

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 

V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 

U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128 

YUV到RGB

B = 1.164(Y - 16)     + 2.018(U - 128) 

G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) 

R = 1.164(Y - 16) + 1.596(V - 128) 

但是,你必须用镊子 'YUV' 和 'RGB' 值0-255
(试试value = value & 0xFF

source

+0

感谢您的回复。我会研究这些链接。之前从未听说过HSL。 –

+0

我可以使用HSV代替HSL吗?并简单地改变V值? –

+2

这真的取决于你认为的“阴影”。 HSL可以轻松使颜色变深或变浅。 HSV可以做其他事情。我认为你想要的是真正的HSL,但你可以尝试两种方式,看看哪个更适合。 – MightyPork