顏色的亮度和灰度計算
阿新 • • 發佈:2019-01-01
對於彩色轉灰度,有一個很著名的心理學公式:Gray = R*0.299 + G*0.587 + B*0.114 ,不是LAB顏色中的L
簡單的亮度計算:(亮度) = 0.299*R + 0.587*G + 0.114*B或者 亮度=(R* 19595 + G* 38469 + B* 7472) >> 16
百分百灰度和亮度的轉換:灰度=(1-亮度/255)*100
#include <windows.h> #include <math.h> //Y(亮度) = 0.299*R + 0.587*G + 0.114*B, int GetColorbrightness(COLORREF dwClr) { // int i = (int)(0.299 * (dwClr&0xff) + 0.587 * ((dwClr>>8)&0xff) + 0.114 * ((dwClr>>16)&0xff)); int i2=((dwClr&0xff) * 19595 + ((dwClr>>8)&0xff) * 38469 + ((dwClr>>16)&0xff) * 7472) >> 16; return i2; } //#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))) int _tmain(int argc, _TCHAR* argv[]) { COLORREF posClr=RGB(0,0,0); //灰度計算 int garyscalc=100*(1-GetColorbrightness(posClr+0.005)/255.0); printf("gray %d %% \n",garyscalc); return 0; }