我建了一个当文档应用程序,在View类中定义了几个变量
BITMAP bmp;
 int m_nWidth;  //存储位图的宽的数据成员
 int m_nHeight; //存储位图高的数据成员
 double m_dHrate;//位图高的比例因子
 double m_dWrate;位图宽的比例因子
 CBitmap m_Bitmap; //位图对象
写了如下一个函数想对256×××像进行灰度处理,打开bmp图像函数已经写好
void CBTTMAPView::OnBmp256ToGray()
{
 // TODO: Add your command handler code here
 CDC *pDC=this->GetDC(); //获得设备上下文
 //CRect m_rect;
 //this->GetClientRect(&m_rect);  //获得窗口客户区
  COLORREF m_color;
 BYTE r,g,b;
 DWORD m_gray;
 for(int i=0;i<(int)(m_nWidth*m_dWrate);i++)
  for(int j=0;j<(int)(m_nHeight*m_dHrate);j++)
  {
    m_color=pDC->GetPixel(i,j); //获得颜色
   r=GetRValue(m_color);
   g=GetGValue(m_color);
   b=GetBValue(m_color);
    m_gray=(int)(0.38*r+0.49*g+0.1*b);//设置灰度颜色值
   m_color=RGB(m_gray,m_gray,m_gray);
   pDC->SetPixel(i,j,m_color);  //用灰度颜色画点
 
 
   }
  InvalidateRect(NULL);
 
}
);
 
发现循环利用GetPixel和SetPixel函数获取和设置像素点,得到的灰度处理结果非常慢,如何通过Dib和调色板进行处理呢?