HSL 又称 HLS。
HSL 的颜色模型如图所示:
H 是英文 Hue 的首字母,表示色相,即组成可见光谱的单色。红色在 0 度,绿色在 120 度,蓝色在 240 度,以此方向过渡。
S 是英文 Saturation 的首字母,表示饱和度,等于 0 时为灰色。在最大饱和度 1 时,具有最纯的色光。
L 是英文 Lightness 的首字母,表示亮度,等于 0 时为黑色,等于 0.5 时是色彩最鲜明的状态,等于 1 时为白色。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一个“格子涂色”的游戏,要求:屏幕上有16x8的格子,屏幕底部有类似画笔中的选色区(随便放上一些常用的颜色),鼠标点击选择区的颜色后,就作为当前颜色,然后再点屏幕上的格子,就可以用刚才的颜色填涂相应格子。
#include <graphics.h>
#include <stdio.h>
#include "conio.h"
void main()
{
int i;
initgraph(800, 500); // 初始化绘图窗口
setfillcolor(getbkcolor()); //预设填充颜色为背景色
float H, S, L; // 定义 HSL 颜色模型的 3 个变量
H = 0;
S = 1;
L = 0.5f;
for(i=0;i<=800;i=i+50) //划分16*8的格子填色区,格子大小为50*50,以及划分四个50*50的调色板
line(i,0,i,400);
for(i=0;i<=400;i=i+50)
line(0,i,800,i);
rectangle(350,450,400,500);
rectangle(400,450,450,500);
rectangle(300,450,350,500);
rectangle(450,450,500,500);
for( i = 300; i !=500 ; ++i) // 绘制调色板颜色
{
L += 0.000000085f;
S -= 0.0013f;
setlinecolor(HSLtoRGB(H, S, L));
line(i, 450,i, 500);
if(i%50==0)
H=H+20;
}
MOUSEMSG m; //获取鼠标信息
while(true)
{
m=GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
//判断鼠标单击的位置
if(m.x>300 && m.x<500 && m.y>450 && m.y<500)
setfillcolor(getpixel(m.x,m.y)); //获取点的颜色
if(m.x>0 && m.x<800 && m.y>0 && m.y<400)
floodfill(m.x,m.y,WHITE); //填充该点所在的封闭区域
break;
}
}
closegraph(); //关闭绘图窗口
}