zoukankan      html  css  js  c++  java
  • 在mfc中picture控件中显示Mat图片<转>

    void ShowMatImgToWnd(CWnd* pWnd, cv::Mat img)  
    {     
        if(img.empty())    
            return;    
      
        CRect drect;         
        pWnd->GetClientRect(&drect);    //(drect);  (&drect);  两种方式均可,竟然   
      
        CClientDC dc(pWnd);  
        HDC hDC =dc.GetSafeHdc();  
      
        //内存中的图像数据拷贝到屏幕上  
        BYTE *bitBuffer        = NULL;  
        BITMAPINFO *bitMapinfo = NULL;  
      
        int ichannels =img.channels();  
        if( ichannels == 1)  
        {  
            bitBuffer  = new BYTE[40+4*256];   
        }  
        else if( ichannels == 3)  
        {  
            bitBuffer  = new BYTE[sizeof(BITMAPINFO)];   
        }  
        else  
        {  
            return;  
        }  
      
      
        if(bitBuffer == NULL)  
        {     
            return;  
        }  
      
      
        bitMapinfo = (BITMAPINFO *)bitBuffer;  
        bitMapinfo->bmiHeader.biSize         = sizeof(BITMAPINFOHEADER);  
        bitMapinfo->bmiHeader.biHeight           = -img.rows;  //如果高度为正的,位图的起始位置在左下角。如果高度为负,起始位置在左上角。  
        bitMapinfo->bmiHeader.biWidth            = img.cols;  
        bitMapinfo->bmiHeader.biPlanes           = 1;      // 目标设备的级别,必须为1     
        bitMapinfo->bmiHeader.biBitCount     = ichannels *8;     // 每个像素所需的位数,必须是1(双色), 4(16色),8(256色)或24(真彩色)之一  
        bitMapinfo->bmiHeader.biCompression      = BI_RGB; //位图压缩类型,必须是 0(不压缩), 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一  
        bitMapinfo->bmiHeader.biSizeImage        = 0;      // 位图的大小,以字节为单位  
        bitMapinfo->bmiHeader.biXPelsPerMeter    = 0;      // 位图水平分辨率,每米像素数  
        bitMapinfo->bmiHeader.biYPelsPerMeter    = 0;      // 位图垂直分辨率,每米像素数  
        bitMapinfo->bmiHeader.biClrUsed          = 0;      // 位图实际使用的颜色表中的颜色数  
        bitMapinfo->bmiHeader.biClrImportant = 0;      // 位图显示过程中重要的颜色数  
      
        if(ichannels == 1)  
        {  
            for(int i=0; i<256; i++)  
            {   //颜色的取值范围 (0-255)  
                bitMapinfo->bmiColors[i].rgbBlue  =bitMapinfo->bmiColors[i].rgbGreen =bitMapinfo->bmiColors[i].rgbRed   =(BYTE) i;  
            }  
      
            bitMapinfo->bmiHeader.biClrUsed          = 256;    // 位图实际使用的颜色表中的颜色数  
        }  
        SetStretchBltMode(hDC, COLORONCOLOR);  
      
          
        StretchDIBits(hDC,  
            0,  
            0,  
            drect.right,        //显示窗口宽度  
            drect.bottom,       //显示窗口高度  
            0,  
            0,  
            img.cols,          //图像宽度  
            img.rows,          //图像高度  
            img.data,             
            bitMapinfo,           
            DIB_RGB_COLORS,   
            SRCCOPY  
            );  
      
        delete []bitBuffer;  
      
    }  

    原贴:https://blog.csdn.net/huixingshao/article/details/54409981

  • 相关阅读:
    SQlite数据库
    关于如何获取剪切板的多个图片处理
    aes 和 Md5 分析
    SIP消息
    getItemAt
    C++ map的方法
    C++ 解析Json
    CentOS 6.3安装配置LAMP服务器(Apache+PHP5+MySQL)
    阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)
    Apache虚拟主机(vhost)配置教程
  • 原文地址:https://www.cnblogs.com/wainiwann/p/8659731.html
Copyright © 2011-2022 走看看