#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
struct RGB
{
float r;
float g;
float b;
};
struct HLS
{
float h;
float l;
float s;
};
float max(float a,float b,float c)
{
if((a>b)&&(a>c))
return a;
if((b>a)&&(b>c))
return b;
if((c>b)&&(c>a))
return c;
}
float min(float a,float b,float c)
{
if((a<b)&&(a<c))
return a;
if((b<a)&&(b<c))
return b;
if((c<b)&&(c<a))
return c;
}
void RGB_To_HLS(RGB a,HLS b)
{
float m,n,delta;
m=max(a.r,a.g,a.b);
n=min(a.r,a.g,a.b);
b.l=(m+n)/2;
if(m==n)
{
b.s=0;
b.h=0;
}
else
{
if(b.l<=0.5)
b.s=(m-n)/(m+n);
else
b.s=(m-n)/(2-m-n);
delta=m-n;
if(a.r==m)
b.h=(a.g-a.b)/delta;
else if(a.g==m)
b.h=2+(a.b-a.r)/delta;
else if(a.b==m)
b.h=4+(a.r-a.g)/delta;
b.h=b.h*60;
if(b.h<0.0)
b.h=b.h+360;
}
cout<<endl;
cout<<"H="<<b.h<<endl;
cout<<"L="<<b.l<<endl;
cout<<"S="<<b.s<<endl;
cout<<endl;
}
float value(float n1,float n2,float hue)
{
float v;
if(hue>360)
hue=hue-360;
if(hue<0)
hue=hue+360;
if(hue<60)
v=n1+(n2-n1)*hue/60;
else if(hue<180)
v=n2;
else if(hue<240)
v=n1+(n2-n1)*(240-hue)/60;
else
v=n1;
return v;
}
void HLS_To_RGB(HLS a,RGB b)
{
float m1,m2;
if(a.l<=0.5)
m2=a.l*(1+a.s);
else
m2=a.l+a.s-a.l*a.s;
m1=2*a.l-m2;
if(a.s==0)
if(a.h==0)
b.r=b.g=b.b=1;
else
cout<<"错误!"<<endl;
else
{
b.r=value(m1,m2,a.h+120);
b.g=value(m1,m2,a.h);
b.b=value(m1,m2,a.h-120);
}
cout<<endl;
cout<<"R="<<b.r<<endl;
cout<<"G="<<b.g<<endl;
cout<<"B="<<b.b<<endl;
cout<<endl;
}
void main()
{
RGB a;
HLS b;
a.r=a.g=a.b=0.0;
b.h=b.l=b.s=0.0;
string c;
do
{
cout<<"请选择要进行的转换:"<<endl;
cout<<"1.将RGB转换为HLS"<<endl;
cout<<"2.将HLS转换为RGB"<<endl;
cout<<"3.退出"<<endl;
c=getch();
if(c=="1")
{
cout<<endl;
cout<<"请输入RGB的值(RGB取值都在0-1之间)"<<endl;
cin>>a.r>>a.g>>a.b;
RGB_To_HLS(a,b);
}
if(c=="2")
{
cout<<endl;
cout<<"请输入HLS的值(H取值在0-360之间,L、S取值在0-1之间)"<<endl;
cin>>b.h>>b.l>>b.s;
HLS_To_RGB(b,a);
}
}while(c!="3");
}
RGB_To_HLS.rar_HLS_HLS色彩变换_RGB to H_rgb to hls_rgb转换hls公式
版权申诉
164 浏览量
2022-09-21
06:53:57
上传
评论
收藏 468KB RAR 举报
林当时
- 粉丝: 95
- 资源: 1万+
最新资源
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
- 基于哈希链表的简单人员信息管理系统
- 其他类别JdonFramework开源框架 v5.1 Build20071025-jdonframework-5.1.rar
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈