1. 程式人生 > >顏色的亮度和灰度計算

顏色的亮度和灰度計算

對於彩色轉灰度,有一個很著名的心理學公式: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;
}