使用SetDIBitsToDevice在MFC中将图像框显示为图像框

时间:2013-11-21 08:38:15

标签: visual-c++ opencv mfc

我使用以下代码显示OpenCV的IplImage。它适用于RGB图像。但对于灰度图像(仅一个通道),图像是颠倒的(倒置)。

    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颜色。如何修改灰度图像? 感谢

1 个答案:

答案 0 :(得分:0)

使用GDI +

  1. 加载彩色位图
  2. 创建一个30%红色59%绿色的ColorMatrix 11%蓝色
  3. 创建ImageAttributes
  4. 将ColorMatricx设置为ImageAttributes
  5. 创建新位图
  6. 将DrawImage与ImageAtributes一起使用,并将彩色位图绘制到新的位图中。
  7. 有一大堆C#代码示例,但C +中的GDI +接口几乎相同。