方法比较简单,但是速度那是相当的慢呀,不过也是一种思路吧
由于bmp位图的显示是根据客户区域大小的变化而变化的,所以核心部分程序如下:
void CEx124View::OnGraychange()
{
CRect rect;//定义类CRect的一个对象
GetClientRect(rect);
int i,j;
for (i=0;i<rect.Width();i++)//得到客户区域大小的宽度
for (j=0;j<rect.Height();j++)
{
COLORREF p1,p2;
CClientDC dc(this);
p1=dc.GetPixel(i,j);//注意GetPixel函数的用法
BYTE R = GetRValue(p1); ///得到红颜色
BYTE G = GetGValue(p1); ///得到绿颜色
BYTE B = GetBValue(p1); ///得到兰颜色
double H=(0.229*R+0.587*G+0.114*B);//利用HUV和RGB之间的转化关系
p2=dc.SetPixel(i,j,RGB(H,H,H));
}
}
这里因为是循环套循环,在处理大的图片的时候速度的确是很慢的,期待改进中。。。