繁体   English   中英

Android 改变颜色的亮度

[英]Android changing a color's brightness

我想改变任何给定颜色的亮度(注意:我不是在谈论屏幕亮度),我看过Color class,它有几种在 RGB 和 HSV 之间转换的方法,我是这个领域的新手. 首先,如果红色的值以 RGB (#FF0000) 为单位指定,我该如何更改红色的亮度?

最简单的方法是将颜色转换为HSL(不是HSV!它们是不同的-请参阅http://en.wikipedia.org/wiki/HSL_and_HSV )并更改L分量-增加使其更亮,减少使其更暗。

考虑到您是在谈论亮度 (色彩增强)而不是亮度 (白色数量),因此您的模型是HSV(aka HSB)而不是HSL。

在快速简报中,如果您将HSV上的V通道增强了,可以说...有些蓝色,则您的颜色为“更多蓝色”。 如果您在HSL模型上增强了L通道,则您会看到一个更加“清晰和水洗”的蓝色。

android.graphics.Color类具有对HSV模型的内置支持。 使用Color.colorToHSV()Color.HSVToColor()编辑亮度值(如果需要,还可以设置色相或饱和度)。

在HSV模型上,H(色相)定义基色,S(饱和度)控制灰色量,而V控制亮度。 因此,如果同时提高V值和降低S值,您将获得更多的亮度。

对于初学者,您需要记住两件事-

  1. 要降低亮度,您可以将红色从#FF0000更改为#AA0000或#880000-基本减少红色分量。
  2. 您还可以尝试降低不透明度-通常您会发现它的效果比仅降低亮度更好。

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM