プログラムは次のとおりです。
関数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;を削除します。
}