首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>C/C++>C++>C++实现RGB和HSL颜色转换代码实例
C++实现RGB和HSL颜色转换代码实例
来源: 发布时间:2008-07-10 发布人: 浏览: 人次   字体: [ ]  

 
    else   
    {    
        float q = (l<0.5f)?(l * (1.0f+s)):(l+s - (l*s));    
        float p = (2.0f * l) - q;  
        float Hk = h/360.0f;    
        float T[3];    
        T[0] = Hk + 0.3333333f; // Tr   0.3333333f=1.0/3.0    
        T[1] = Hk;              // Tb    
        T[2] = Hk - 0.3333333f; // Tg      
 
        for(int i=0; i<3; i++)    
        {    
            if(T[i] < 0) T[i] += 1.0f;    
            if(T[i] > 1) T[i] -= 1.0f;    
 
            if((T[i]*6) < 1)    
            {    
                T[i] = p + ((q-p)*6.0f*T[i]);    
            }    
            else if((T[i]*2.0f) < 1) //(1.0/6.0)<=T[i] && T[i]<0.5  
            {    
                T[i] = q;    
            }    
            else if((T[i]*3.0f) < 2) // 0.5<=T[i] && T[i]<(2.0/3.0)    
            {    
                T[i] = p + (q-p) * ((2.0f/3.0f) - T[i]) * 6.0f;    
            }    
            else T[i] = p;   
        }  
        R = T[0]*255.0f;    
        G = T[1]*255.0f;  
        B = T[2]*255.0f;  
 
    }    
    rgb->red = (BYTE)((R>255)? 255 : ((R<0)?0 : R));    
    rgb->green = (BYTE)((G>255)? 255 : ((G<0)?0 : G));   
    rgb->blue = (BYTE)((B>255)? 255 : ((B<0)?0 : B));  
 
}  
int _tmain(int argc, _TCHAR* argv[])    
{    
    COLOR_RGB  rgb={254, 216, 166}; 
    COLOR_HSL  hsl;  
    RGBtoHSL(&rgb, &hsl);    
    printf("H=%.0f; S=%.0f; L=%.0f\n", hsl.hue, hsl.saturation, hsl.luminance); 
    HSLtoRGB(&hsl, &rgb);    
    RGBtoHSL(&rgb, &hsl);    
    printf("H=%.0f; S=%.0f; L=%.0f\n", hsl.hue, hsl.saturation, hsl.luminance);   
    getchar();    
    return 0;  
 
}    
 
 
// 在Windows系统下,HSL分量的范围是[0,240]。参考“画笔”程序,可以看到RGB(红|绿|蓝)  
 
// 和HSL(色调|饱和度|亮度)的联系。  
 
// 下面的代码,把COLOR_HSL的分量值变为Windows的HSL分量,取值在[0,240]之间,需要:   
     
COLOR_HSL  hsl={300, 50, 82};   
     
// 下面为COLOR_HSL到Windows的HSL的转换:  
 
win_H = 240 * hsl.hue / 360.f;    
win_S = 240 * hsl.saturation / 100.f;    
win_L = 240 * hsl.luminance / 100.f; 

共2页: 上一页 [1] 2 下一页
相 关 文 章   发布商链接
·如何在C++语言中对浮点数进行格式化...
·对比C++中sizeof与strlen函数的区别
·谈谈对C和C++中include指令的使用及...
·举例说明用C++创建不能被继承的类
·C++实现人民币阿拉伯数字转成中文大...
·c++下256色位图格式与256色位图编程
·C++实现对八进制字符串转换为整数的...
·C语言程序设计入门学习六步曲
·C++不是万能的
·实例详细介绍各种字符集编码转换问题...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·如何在C++中创建持久对象的方
·c++实现获取IE缓存文件夹中的
·C++中regex库中静态正则表达...
·VC++编写交互程序时将打印结...
·实例讲解C++中CopyFileEx函数
·c++获取Windows 2000/XP操作...
·C++语言中多重继承下的虚函数
·什么是单例模式?C++中单例模...
·基于C++的DES加密算法实现代...
·vc命令行调用winrar.exe进行...
·C++计算含括号四则表达式的模
·C++程序中内存划分介绍
·vc读取XML文件中的文本代码
·祥解C++中的this指针
·在Linux下验证日期是否合法
热 门 文 章
·基于C++的DES加密算法实现代...
·实例详细介绍各种字符集编码...
·vc读取XML文件中的文本代码
·祥解C++中的this指针
·vc命令行调用winrar.exe进行...
·C++中regex库中静态正则表达...
·C语言程序设计入门学习六步曲...
·VC++编写交互程序时将打印结...
·C++语言中多重继承下的虚函数...
·实例讲解C++中CopyFileEx函数...
·C++不是万能的
·c++实现获取IE缓存文件夹中的...
·什么是单例模式?C++中单例模...
·谈谈对C和C++中include指令的...
·C++程序中内存划分介绍
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .