qt实现颜色十六进制转换为rgb并且进行扩展

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

目录

一、转换为rgb

二、扩展rgb颜色

三、生成.txt文件储存rgb颜色点

四、补充代码

五、运行结果

六、补充(均匀采样)


最近需要使用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 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值