左键选择颜色,右键消除颜色
//#include "stdafx.h"
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
int main()
{
int i;
initgraph(1000, 800); // 初始化绘图窗口
setfillcolor(getbkcolor()); //预设填充颜色为背景色
float H,S,L; // 定义 HSL 颜色模型的 3 个变量
H = 0; //色相
S= 1; //饱和度
L = 0.5f; //亮度
for (i = 0; i <= 1000; i = i + 50) //划分16*8的格子填色区,格子大小为50*50,以及划分四个50*50的调色板
line(i, 0, i, 700);
for (i = 0; i <= 700; i = i + 50)
line(0, i, 1000, i);
rectangle(400, 750, 450,800);
rectangle(450, 750, 500,800);
rectangle(500, 750, 550,800);
rectangle(550, 750, 600,800);
for (i = 400; i != 600; ++i) // 绘制调色板颜色
{
L += 0.000000085f;
S -= 0.0013f;
setlinecolor(HSLtoRGB(H, S, L));
line(i, 750, i, 800); //从左向右开始画线
if (i % 50 == 0) //每50单位就换颜色
H = H + 40;
}
MOUSEMSG m; //获取鼠标信息
while (true)
{
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
//判断鼠标单击的位置
if (m.x > 400 && m.x < 600 && m.y>750 && m.y < 800)
setfillcolor(getpixel(m.x, m.y)); //获取点的颜色
if (m.x > 0 && m.x < 1000 && m.y>0 && m.y < 700)
floodfill(m.x, m.y,WHITE); //填充该点所在的封闭区域
break;
case WM_RBUTTONDOWN:
//鼠标右击消除颜色
setfillcolor(getbkcolor()); //获取背景的颜色
if (m.x > 0 && m.x < 1000 && m.y>0 && m.y < 700)
floodfill(m.x, m.y, WHITE); //填充该点所在的封闭区域
break;
}
}
closegraph(); //关闭绘图窗口
}