全网最简单的HSL转RGB

全网最简单的HSL转RGB
H[0,360] S[0,100] L[0,100]
R[0,255] G[0,255] B[0,255]

#include <iostream>
#include "math.h" 

	
int main(int argc, char** argv) {
	int H ;
	float S ;
	float L ;

	int *P1,*P2,*P3;
	float value_A,value_B,value_C;
	unsigned char mode=0;
	
	float ratio;
	int R,G,B;
int *p_buf[6][3]={
		{&R,&G,&B},
		{&G,&R,&B},
		{&G,&B,&R},
		{&B,&G,&R},
		{&B,&R,&G},
		{&R,&B,&G},
};
	while(1)
	{
		
	printf("(ps:输入大于360的数退出) \r\n请输入 H:");
	scanf("%d",&H);
	if(H>360)
	 	return 0;
	printf("请输入 S:");
	scanf("%f",&S);
	printf("请输入 L:");
	 scanf("%f",&L);
	 
	 if(H==360)H=0;
	 if(S==0)//白色 
	 {
		R = L;
		G = L;
		B = L;
		goto end;
	 }
	 S = S/100;
	 L = L/100;
	 mode = H/60;
	 ratio = H/60.0-mode;
//	printf("mode :%d ratio:%.2f \r\n",mode,ratio);
	 value_A = 255;
	 if(mode%2==0)	 value_B = 255*ratio;
	 else	 value_B = 255*(1-ratio);
	 value_C = 0;
	 
//	printf("A:%.2f B:%.2f C:%.2f	>>>\r\n",value_A,value_B,value_C);
	 value_A = ((1-S)*255+value_A*S)*L;
	 value_B = ((1-S)*255+value_B*S)*L;
	 value_C = ((1-S)*255+value_C*S)*L;
	 
//	printf("A:%.2f B:%.2f C:%.2f	>>>\r\n",value_A,value_B,value_C);
	//  value_A = value_A*L;
	//  value_B = value_B*L;
	//  value_C = value_C*L;
//	printf("A:%.2f B:%.2f C:%.2f	>>>\r\n",value_A,value_B,value_C);
	  
	 *p_buf[mode][0]=(int)(value_A+0.5);//四舍五入 
	 *p_buf[mode][1]=(int)(value_B+0.5);//四舍五入
	 *p_buf[mode][2]=(int)(value_C+0.5);//四舍五入
end:
	printf("转换出的RGB >>> R:%d G:%d B:%d\r\n\r\n",R,G,B);
	
	 } 
	return 0;
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值