2013-11-21 75 views
0

我使用下面的代码来显示OpenCV的IplImage。它适用于RGB图像。但对于灰色图像(只有一个通道),图像是倒置的(反转)。使用SetDIBitsToDevice在MFC中显示灰度图像到图片框

if(m_img && m_img->depth == IPL_DEPTH_8U) 
    { 
     uchar buffer[sizeof(BITMAPINFOHEADER) + 1024]; 
     BITMAPINFO* bmi = (BITMAPINFO*)buffer; 
     int bmp_w = m_img->width, bmp_h = m_img->height; 
     FillBitmapInfo(bmi, bmp_w, bmp_h, Bpp(), m_img->origin); 
     from_x = MIN(MAX(from_x, 0), bmp_w - 1); 
     from_y = MIN(MAX(from_y, 0), bmp_h - 1); 
     int sw = MAX(MIN(bmp_w - from_x, w), 0); 
     int sh = MAX(MIN(bmp_h - from_y, h), 0); 
     SetDIBitsToDevice(
      dc, x, y, sw, sh, from_x, from_y, from_y, sh, 
      m_img->imageData + from_y*m_img->widthStep, 
      bmi, DIB_RGB_COLORS); 
    } 

我看着功能链接here并表明lpvBits是RGB颜色。我如何修改灰度图像? 感谢

回答

0

使用GDI +

  1. 装入有色位图
  2. 30%红色59%绿 11%蓝
  3. 创建嘉洛斯创建一个ImageAttributes
  4. 将ColorMatricx到ImageAttributes
  5. 创建一个新的位图
  6. 使用DrawImage与Ima geAtributes并将彩色位图绘制到新的位图中。

有一小群C#代码示例,但C +中的GDI +接口几乎完全相同。