#define min3v(v1, v2, v3) ((v1)>(v2)? ((v2)>(v3)?(v3):(v2)):((v1)>(v3)?(v3):(v2)))
#define max3v(v1, v2, v3) ((v1)<(v2)? ((v2)<(v3)?(v3):(v2)):((v1)<(v3)?(v3):(v1)))
typedef struct
color_rgb;
typedef struct
color_hsl;
// converts rgb to hsl
static void rgbtohsl(const color_rgb *rgb, color_hsl *hsl)
else if(maxval==r && g>=b)
else if(maxval==r && g// luminance
l = (maxval+minval)/2.0f;
// saturation
if(l == 0 || maxval == minval)
else if(00.5f)
hsl->hue = (h>360)? 360 : ((h<0)?0:h);
hsl->saturation = ((s>1)? 1 : ((s<0)?0:s))*100;
hsl->luminance = ((l>1)? 1 : ((l<0)?0:l))*100;
}// converts hsl to rgb
static void hsltorgb(const color_hsl *hsl, color_rgb *rgb)
else
else if((t[i]*2.0f) < 1) //(1.0/6.0)<=t[i] && t[i]<0.5
else if((t[i]*3.0f) < 2) // 0.5<=t[i] && t[i]<(2.0/3.0)
else t[i] = p;
}r = t[0]*255.0f;
g = t[1]*255.0f;
b = t[2]*255.0f;
}rgb->red = (int)((r>255)? 255 : ((r<0)?0 : r));
rgb->green = (int)((g>255)? 255 : ((g<0)?0 : g));
rgb->blue = (int)((b>255)? 255 : ((b<0)?0 : b));
}// 在windows系統下,hsl分量的範圍是[0,240].參考「畫筆」程式,可以看到rgb(紅|綠|藍)
// 和hsl(色調|飽和度|亮度)的聯絡。
// 下面的**,把color_hsl的分量值變為windows的hsl分量,取值在[0,240]之間,需要:
// 下面為color_hsl到windows的hsl的轉換:
// win_h = 240 * hsl.hue / 360.f;
// win_s = 240 * hsl.saturation / 100.f;
// win_l = 240 * hsl.luminance / 100.f;
上面內容**自原文裡有些錯誤,已修正~
RGB 和 HSL 的轉換和應用
一丶hsl hsl即色相 飽和度 亮度 英語 hue,saturation,lightness 色相 h 是色彩的基本屬性,就是平常所說的顏色名稱,如紅色 黃色等,取0 360。飽和度 s 是指色彩的純度,越高色彩越純,低則逐漸變灰,取0 100 0 1 的數值。明度 v 亮度 l 取0 100 0...
RGB565和RGB888的轉換
1 rgb565或rgb16格式說明 rgb565彩色模式也稱rgb16彩色模式,指的是用16位表示乙個畫素,即 乙個畫素佔兩個位元組,其中 第乙個位元組的前5位用來表示r red 第乙個位元組的後三位 第二個位元組的前三位用來表示g green 第二個位元組的後5位用來表示b blue 如 15 ...
RGB和YUV的區別和轉換
rgb和yuv都是色彩空間,用於表示顏色,兩者可以相互轉化 至於電視採用yuv分量形式是由itu 國際電信聯盟 規定的,因為其能減少資料儲存空間和資料傳輸頻寬,同時又能非常方便的相容黑白電視!yuv是被歐洲電視系統所採用的一種顏色編碼方法 屬於pal 是pal和secam模擬彩色電視制式採用的顏色空...