android RGB颜色值调节亮度,饱和度,色调
好久没写博客了,最近在做一个物联网的项目其中涉及到控制七彩灯设备,要求可以调节灯光的颜色,包括亮度,饱和度,色调,刚开始做这个七彩灯的时候也不知道16进制的rgb怎么能调节亮度,饱和度,色调。那只有百度上搜喽。推荐两个博客第一个第二个;这两个看完基本也就了解的差不多了。下面我就结合我的项目来说说怎么hsv与rgb之间互相转化。
主要用到的就是 如下方法,传两个参数。官方说注释写的挺详细的。
/**
* Convert the ARGB color to its HSV components.
* <ul>
* <li><code>hsv[0]</code> is Hue \([0..360[\)</li>(色调,取值范围0-360)
* <li><code>hsv[1]</code> is Saturation \([0...1]\)</li>(饱和度,取值范围0-1)
* <li><code>hsv[2]</code> is Value \([0...1]\)</li>(亮度,取值范围0-1)
* </ul>
* @param color the argb color to convert. The alpha component is ignored.(16进制RGB颜色值)
* @param hsv 3 element array which holds the resulting HSV components.(长度3的float数组)
*/
public static void colorToHSV(@ColorInt int color, @Size(3) float hsv[]) {
RGBToHSV((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, hsv);
}
我就简单介绍下怎么使用这个方法吧。直接伪代码演示。
private float mHue;//色调范围0-360
private float mSat;//饱和度范围0-1
private float mVal;//亮度范围0-1
int mColor=Color.parseColor("#EC5745");//随便定义一个16进制颜色值
float[] hsv = new float[3];//定义一个长度为3的数组
Color.colorToHSV(mColor, hsv);//转化hsv
//转化结果
// mHue = hsv[0];//色调范围0-360
// mSat = hsv[1];//饱和度范围0-1
//mVal = hsv[2];//亮度范围0-1
//可以自己调整大小 progress==进度;seekBar.getMax()==100(就是个进度条)
mHue = (float) (3.6 * progress);////色调范围0-360
mSat = (float) progress / seekBar.getMax();//饱和度范围0-1
mVal = (float) progress / seekBar.getMax();//亮度范围0-1
//最后可以将更改后的hvs值在设置到view背景上。
view.setColor(Color.HSVToColor(new float[]{mHue, mSat, mVal}));
是不是很简单啊,提前是把上面两个博客看完,了解下hsv;hsv和RGB的转换关系。
google帮我们写好的两个转化的方法
Color.colorToHSV();
Color.HSVToColor();
demo地址demo;在com.example.androidremark.ui3.light包下的ColorLightActivity。有兴趣可以下载源码看看。效果如下