基于 HSL 色彩模型的渐变色矩形绘制函数
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】EasyX
[
21 瀏覽
0 評論
9 贊
10 踩
]
概要
正文
原创
// 绘制渐变色矩形 // c 原色 // kh, ks ,kl 色彩的 HSL 单位像素变化率 // 注:H 和 S 的渐变不能实现异色过渡 void GradientRectangle(RECT rct, COLORREF c, float kh, float ks, float kl) { float h, s, l; RGBtoHSL(c, &h, &s, &l); int nOldLineColor = getlinecolor(); for (int i = 0; i < rct.right - rct.left; i++) { setlinecolor(HSLtoRGB(h + i * kh, s + i * ks, l + i * kl)); line(i + rct.left, rct.top, i + rct.left, rct.bottom); } setlinecolor(nOldLineColor); } // 绘制渐变色矩形 // c1, c2 初始颜色、终止颜色 void GradientRectangle(RECT rct, COLORREF c1, COLORREF c2) { float h[2], s[2], l[2]; COLORREF c[2] = { c1,c2 }; for (int i = 0; i < 2; i++) RGBtoHSL(c[i], &h[i], &s[i], &l[i]); int len = rct.right - rct.left; float kh = (h[1] - h[0]) / len; float ks = (s[1] - s[0]) / len; float kl = (l[1] - l[0]) / len; GradientRectangle(rct, c[0], kh, ks, kl); } // 绘制渐变色矩形 // c 初始颜色(只用于 H 和 S 的采样) // l1, l2 初始亮度、终止亮度(暗 0 ~ 1 亮) void GradientRectangle(RECT rct, COLORREF c, double l1, double l2) { float h, s, l; RGBtoHSL(c, &h, &s, &l); GradientRectangle(rct, HSLtoRGB(h, s, (float)l1), 0, 0, (float)(l2 - l1) / (rct.right - rct.left)); }
只写了横向的颜色过渡。