目录
最近需要使用qt来创建一个色板用于图像显示,而色板是十六进制的,网上的在线转换只能一个一个进行转换,比较麻烦(ˉ▽ˉ;)...,所以小写一个代码进行格式转换。由于色板只有30多种颜色,这里会进行扩展至256种颜色(这里采用两种颜色取中值的办法进行扩展),最终生成一个.txt文件用来存储这256个rgb颜色点。话不多说,直接上代码!
一、转换为rgb
void Widget::changeColor()
{
//数组清零
memset(color_rgb_1, 0, sizeof(color_rgb_1));
memset(color_rgb_2, 0, sizeof(color_rgb_2));
int r, g, b;
int color_count = 0;
int loop_count = 0;
int *p_rgb = color_rgb_1;
//16进制颜色数据
string color_hex[] = { "#EDB603","#EF9906","#FA7B06","#FE5A04","#E14B18",
"#E32E19","#D21C33","#B71048","#900956","#820178",
"#61058F","#4D08B0","#361ABC","#1F29D9","#1A42D5",
"#0755FD","#076BDB","#018CF5","#0990F1","#10C0E5",
"#19BCBB","#33E4C8","#4BE7A6","#6CF990","#82F47B",
"#9FF95C","#BCEB4F","#CAE22C","#DACE18","#F2B50d",
"#F49F04"};
//rgb转化
for(int i = 0; i <= 30; i++)
{
if (color_hex[i].at(0) == '#') {
color_hex[i] = color_hex[i].erase(0, 1);
}
//提取rgb值
istringstream(color_hex[i].substr(0, 2)) >> hex >> r;
istringstream(color_hex[i].substr(2, 2)) >> hex >> g;
istringstream(color_hex[i].substr(4, 2)) >> hex >> b;
//把提取的rgb存储在数组里
color_rgb_1[color_count] = r;
color_rgb_1[color_count + 1] = g;
color_rgb_1[color_count + 2] = b;
if(i != 30)
{
color_count += 3;
}
loop_count++;
}
createFile(extendColor(p_rgb, p_rgb, loop_count, recursion_count));
}
二、扩展rgb颜色
/*
功能说明:扩展rgb颜色点
参数说明:p_rgb - 移位指针1
p2_rgb - 移位指针2
color_rgb_num - rgb颜色点的数量
recursion_count - 递归的次数
返回值 :一个指向数组的整型指针
*/
int *Widget::extendColor(int *p_rgb, int *p2_rgb, int color_rgb_num, int recursion_count)
{
int r, g, b;
int loop_count = 0; //循环次数
int extend_num = color_rgb_num * 2 - 1; //扩展后的颜色点数
//递归次数达到3次,也就是扩展到了241个颜色点
if(recursion_count == 3)
{
memset(color_rgb_1, 0, sizeof(color_rgb_1));
//补充15个颜色点
int

本文介绍了一个使用Qt编写的代码,将16进制颜色转换为RGB,并通过扩展算法生成256种颜色点,存储在.txt文件中。代码包括颜色转换、颜色扩展和文件创建功能,适用于创建色板。此外,还讨论了当颜色点超过需求时,如何使用均匀采样来减小色差。
最低0.47元/天 解锁文章
1294

被折叠的 条评论
为什么被折叠?



