⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hsltorgb.c

📁 Graphics Gems 源码 a collection of algorithms, programs, and mathematical techniques for the computer
💻 C
字号:
/*A Fast HSL-to-RGB Transformby Ken Fishkinfrom "Graphics Gems", Academic Press, 1990*/#include <math.h>#include <stdio.h>#include "GGems.h"    /*     * RGB-HSL transforms.     * Ken Fishkin, Pixar Inc., January 1989.     */    /*    * given r,g,b on [0 ... 1],    * return (h,s,l) on [0 ... 1]    */voidRGB_to_HSL	(r,g,b,h,s,l)double 	r,g,b;double *h, *s, *l;{    double v;    double m;    double vm;    double r2, g2, b2;    v = MAX(r,g);    v = MAX(v,b);    m = MIN(r,g);    m = MIN(m,b);    if ((*l = (m + v) / 2.0) <= 0.0) return;    if ((*s = vm = v - m) > 0.0) {		*s /= (*l <= 0.5) ? (v + m ) :			(2.0 - v - m) ;    } else	return;    r2 = (v - r) / vm;    g2 = (v - g) / vm;    b2 = (v - b) / vm;    if (r == v)		*h = (g == m ? 5.0 + b2 : 1.0 - g2);    else if (g == v)		*h = (b == m ? 1.0 + r2 : 3.0 - b2);    else		*h = (r == m ? 3.0 + g2 : 5.0 - r2);    	*h /= 6;	}    /*     * given h,s,l on [0..1],     * return r,g,b on [0..1]     */voidHSL_to_RGB(h,sl,l,r,g,b)double 	h,sl,l;double 	*r, *g, *b;{    double v;    v = (l <= 0.5) ? (l * (1.0 + sl)) : (l + sl - l * sl);    if (v <= 0) {		*r = *g = *b = 0.0;    } else {		double m;		double sv;		int sextant;		double fract, vsf, mid1, mid2;		m = l + l - v;		sv = (v - m ) / v;		h *= 6.0;		sextant = h;			fract = h - sextant;		vsf = v * sv * fract;		mid1 = m + vsf;		mid2 = v - vsf;		switch (sextant) {			case 0: *r = v; *g = mid1; *b = m; break;			case 1: *r = mid2; *g = v; *b = m; break;			case 2: *r = m; *g = v; *b = mid1; break;			case 3: *r = m; *g = mid2; *b = v; break;			case 4: *r = mid1; *g = m; *b = v; break;			case 5: *r = v; *g = m; *b = mid2; break;		}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -