参照Jpeglib的图像灰度化方法:
像素颜色 = 0.299*red+0.587*Green+0.114*Blue.
按像素取24位彩图的每一个点的颜色值。
存储为新灰度图一个像素(一个字节)
调色板是:rgb(0,0,0)......rgb(255,255,255)
像素颜色 = 0.299*red+0.587*Green+0.114*Blue.
按像素取24位彩图的每一个点的颜色值。
存储为新灰度图一个像素(一个字节)
调色板是:rgb(0,0,0)......rgb(255,255,255)
g=GetGValue(cl);
b=GetBValue(cl);将 r,g,b 各自成方,求和,然后,开方.
得到一个 double value( double tmp)
tmp 强行转化为 BYTE v;
cl=RGB(v,v,v)
这样,将所有的点转化后,就得到了灰度图像.
// 参数:
// nWidth -图像的宽度
// nHeight -图像的高度
// lpPixel -指向图像像素起始位置的指针
bool RGBToYIQ_Y(int nWidth, int nHeight, LPBYTE lpPixel)
{
long i;
int B, G, R, Y;
LPBYTE lpSrc = lpPixel;
LPBYTE lpDst = lpPixel; for (i = 0; i < nHeight * nWidth; i++)
{
B = *lpSrc;
G = *(lpSrc + 1);
R = *(lpSrc + 2); lpSrc += 3; Y = (int) (0.299 * R + 0.587 * G + 0.114 * B);
if (Y < 0) Y = 0;
if (Y > 255) Y = 255; *lpDst = (char) Y;
*(lpDst + 1) = (char) Y;
*(lpDst + 2) = (char) Y; lpDst += 3;
} return TRUE;
}
你可以用val=(R+G+B)/3来当新的RGB值来用,把
COLORREF c;
GetPixels(x,y,c) //读出来
GetRValue(c)得到R值
GetGValue(c)得到G值
GetBValue(c)得到B值
val=(R+G+B)/3
SetPixels(x,y,RGB(val,val,val))//写回去
也可以不用平均值用比例系数来做,方法类似
huqiming(胡其明) is right
谢谢! :)Email : [email protected]