一、原理阐述:
(1)十六进制颜色值= 商(RGB颜色值/16)+余数(RGB颜色值/16);
(2)十六进制颜色值格式:0x+2个十六进制红色值字符+2个十六进制绿色值字符+2个十六进制蓝色值字符
(3)本算法不带ALPHA,另外输出结果为小写十六进制字符串模式(如:天蓝色 0x87ceeb)
二、完整代码:
static char RGBtoHEX(int RGBred, int RGBgreen, int RGBblue)
{
char *HEXred;
char *HEXgreen;
char *HEXblue;
char CODE[]="0123456789abcdef";
int CODE_NUM_SHANG;
int CODE_NUM_YUSHU;
// if(RGBred == 0)
// {
// HEXred = "00";
// }
//
// if(RGBgreen == 0)
// {
// HEXgreen = "00";
// }
//
// if(RGBblue == 0)
// {
// HEXblue = "00";
// }
if(RGBred > 255 | RGBgreen > 255 | RGBblue > 255)
{
printf("RGB VALUE ERROR, PLEASE CHECK IT!");
}
else
{
/*红色RGB转HEX*/
if(RGBred != 0 & RGBred <= 255)
{
CODE_NUM_SHANG = RGBred/16;
CODE_NUM_YUSHU = RGBred%16;
if(CODE_NUM_SHANG < 10 & CODE_NUM_YUSHU <10)
{
*HEXred = CODE_NUM_SHANG+ CODE_NUM_YUSHU;
}
else if (CODE_NUM_SHANG >= 10 & CODE_NUM_YUSHU >= 10)
{
*HEXred = CODE[CODE_NUM_SHANG+1]+ CODE[CODE_NUM_YUSHU+1];
}
else if (CODE_NUM_SHANG >= 10 & CODE_NUM_YUSHU < 10)
{
*HEXred = CODE[CODE_NUM_SHANG+1]+ CODE_NUM_YUSHU;
}
else if (CODE_NUM_SHANG < 10 & CODE_NUM_YUSHU >= 10)
{
*HEXred = CODE_NUM_SHANG+ CODE[CODE_NUM_YUSHU+1];
}
}
/*绿色RGB转HEX*/
if(RGBgreen != 0 & RGBgreen <= 255)
{
CODE_NUM_SHANG = RGBgreen/16;
CODE_NUM_YUSHU = RGBgreen%16;
if(CODE_NUM_SHANG < 10 & CODE_NUM_YUSHU <10)
{
*HEXgreen = CODE_NUM_SHANG+ CODE_NUM_YUSHU;
}
else if (CODE_NUM_SHANG >= 10 & CODE_NUM_YUSHU >= 10)
{
*HEXgreen = CODE[CODE_NUM_SHANG+1]+ CODE[CODE_NUM_YUSHU+1];
}
else if (CODE_NUM_SHANG >= 10 & CODE_NUM_YUSHU < 10)
{
*HEXgreen = CODE[CODE_NUM_SHANG+1]+ CODE_NUM_YUSHU;
}
else if (CODE_NUM_SHANG < 10 & CODE_NUM_YUSHU >= 10)
{
*HEXgreen = CODE_NUM_SHANG+ CODE[CODE_NUM_YUSHU+1];
}
}
/*蓝色RGB转HEX*/
if(RGBblue != 0 & RGBblue <= 255)
{
CODE_NUM_SHANG = RGBblue/16;
CODE_NUM_YUSHU = RGBblue%16;
if(CODE_NUM_SHANG < 10 & CODE_NUM_YUSHU <10)
{
*HEXblue = CODE_NUM_SHANG+ CODE_NUM_YUSHU;
}
else if (CODE_NUM_SHANG >= 10 & CODE_NUM_YUSHU >= 10)
{
*HEXblue = CODE[CODE_NUM_SHANG+1]+ CODE[CODE_NUM_YUSHU+1];
}
else if (CODE_NUM_SHANG >= 10 & CODE_NUM_YUSHU < 10)
{
*HEXblue = CODE[CODE_NUM_SHANG+1]+ CODE_NUM_YUSHU;
}
else if (CODE_NUM_SHANG < 10 & CODE_NUM_YUSHU >= 10)
{
*HEXblue = CODE_NUM_SHANG+ CODE[CODE_NUM_YUSHU+1];
}
}
return(*HEXred + *HEXgreen + *HEXblue) ;
}
}
三、引用方法:
(1)在使用LVGL的色环组件(lv_colorwheel)时,可以用如下方法获取色环组件的RGB当前值
lv_color_t color = lv_colorwheel_get_rgb(colorwheel); //获取色环组件选中的当前颜色值
int RGB_RED = color.ch.red; //红色的RGB数值
int RGB_GREEN = color.ch.green; //绿色的RGB数值
int RGB_BLUE = color.ch.blue; //蓝色的RGB数值
(2)RGB格式颜色转十六进制格式颜色转换函数引用示例:
char *HEX_RGB = RGBtoHEX (RGB_RED, RGB_GREEN, RGB_BLUE);