Android如何改变颜色的亮度

3

我希望改变任何给定颜色的亮度(注意:我不是在谈论屏幕亮度),我查看了Color类,它有一些方法用于RGB和HSV之间的转换,我在这个领域是新手。首先,如果红色的值以RGB(#FF0000)指定,我该如何改变其亮度?

4个回答

5

4
最好提供代码示例,我想了解理论。 - Ragunath Jawahar
1
https://dev59.com/CXE95IYBdhLWcg3wV8e_ 有代码示例的链接。 - etarion
这不是真的。这里有一种使用HSV改变亮度的方法,https://dev59.com/KG445IYBdhLWcg3wTInm#4928826 - Kimi Chiu
HSL 确实更为合适。如果您使用 Android 支持库,可以使用 ColorUtils.colorToHSL()ColorUtils.HSLToColor() 进行转换。 - sulai

3
考虑到您所说的是亮度(颜色增强)而不是亮度(白色数量),因此您的模型是HSV(又称HSB),而不是HSL。
简单来说,如果您在HSV上增强了V通道,比如...一些蓝色,您会得到更多的“蓝色”颜色。如果您在HSL模型的L通道上增强,则会得到更清晰、洗净的蓝色。
android.graphics.Color类内置支持HSV模型。使用Color.colorToHSV()和Color.HSVToColor()编辑亮度值(或色调、饱和度,如果您喜欢)。
在HSV模型中,H(色调)定义基本颜色,S(饱和度)控制灰度的数量,而V控制亮度。因此,如果您同时增强V并减少S,实际上会得到更多的亮度。

2

首先,您需要记住两件事 -

  1. 要减少亮度,您可以将红色从#FF0000更改为#AA0000或#880000-基本上减少红色组件。
  2. 您也可以尝试降低不透明度 - 您会发现这比仅仅降低亮度更有效。

我有一个改变不透明度的想法,如果我有像#D456FB这样的东西,我该如何均匀降低亮度? - Ragunath Jawahar
1
#D456FB 相当于 #FFD456FB,其中前两个字符代表不透明度。将其更改为 #99D456FB 可以获得降低的不透明度。如果您是通过代码而不是通过 Xml 进行操作,请搜索如何增加或减少“alpha”。 - Abhinav Manchanda

1
您可以使用Color.colorToHSV将颜色转换为HSV,然后更改HSV颜色的亮度,最后使用Color.HSVToColor将其转换回颜色int。例如,以下代码将亮度设置为0.5:
@ColorInt int originalColor = /*your original color*/;
float[] hsv = new float[3];    //Create an array to pass to the colorToHSV function
Color.colorToHSV(originalColor, hsv);    //Put the HSV components in the array created above
hsv[2] = 0.5f;    //Whatever brightness you want to set. 0 is black, 1 is the pure color.
@ColorInt int newColor = Color.HSVToColor(hsv);    //Convert it back to a ColorInt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接