mfcの画像コントロールに画像を表示する

プログラムは次のとおりです。
関数ShowMatImgToWnd(CWnd * pWnd、cv :: Mat img)を呼び出して、画像コントロールに目的の画像を表示します。画像コントロールのハンドルは、CWnd * pWndパラメータに入力し、GetDlgItem(IDC_picture )と取得する他の方法(IDピクチャーコントロールのIDC_picture)を、マットのimgパラメータは、あなたが絵マット表示したい形式で
のボイドShowMatImgToWnd(CWndの* PWND、CV ::マットIMG)
{    
    )IF(img.empty()  
        の戻りを。  

    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; //ビットマップの垂直解像度、1メートルあたりのピクセル数
    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
        );

    [] bitBuffer;を削除します。

}

元の記事を59件公開 いいね46 30,000回以上訪問

おすすめ

転載: blog.csdn.net/sinat_41852207/article/details/90372619