void Ctracker_test190220Dlg::ShowMatImage(Mat& src,int ID)
{
try
{
if (src.empty())//沒有圖像時推出
{
return;
}
BITMAPINFO *pBmpInfo1=NULL;
if (src.channels() == 1)//灰度圖像顯示
{
pBmpInfo1 = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)+256 * sizeof(RGBQUAD)];////bmp圖信息頭
pBmpInfo1->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBmpInfo1->bmiHeader.biWidth = src.cols;//src_rec.Width();
pBmpInfo1->bmiHeader.biHeight = -src.rows; //-src_rec.Height();//爲負值
pBmpInfo1->bmiHeader.biPlanes = 1;
pBmpInfo1->bmiHeader.biBitCount = 8;//八位
pBmpInfo1->bmiHeader.biCompression = BI_RGB;
pBmpInfo1->bmiHeader.biSizeImage = 0;
pBmpInfo1->bmiHeader.biXPelsPerMeter = 0;
pBmpInfo1->bmiHeader.biYPelsPerMeter = 0;
pBmpInfo1->bmiHeader.biClrUsed = 0;
pBmpInfo1->bmiHeader.biClrImportant = 0;
for (int i = 0; i<256; i++)//只有灰度圖像需要顏色表
{
pBmpInfo1->bmiColors[i].rgbBlue = pBmpInfo1->bmiColors[i].rgbGreen = pBmpInfo1->bmiColors[i].rgbRed = (BYTE)i;
pBmpInfo1->bmiColors[i].rgbReserved = 0;
}
}
if (src.channels() == 3)
{
pBmpInfo1 = (BITMAPINFO*) new char[sizeof(BITMAPINFOHEADER)];
pBmpInfo1->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBmpInfo1->bmiHeader.biWidth = src.cols;//src_rec.Width();
pBmpInfo1->bmiHeader.biHeight = -src.rows; //-src_rec.Height();//爲負值
pBmpInfo1->bmiHeader.biPlanes = 1;
pBmpInfo1->bmiHeader.biBitCount = 24;//24位
pBmpInfo1->bmiHeader.biCompression = BI_RGB;
pBmpInfo1->bmiHeader.biSizeImage = 0;
pBmpInfo1->bmiHeader.biXPelsPerMeter = 0;
pBmpInfo1->bmiHeader.biYPelsPerMeter = 0;
pBmpInfo1->bmiHeader.biClrUsed = 0;
pBmpInfo1->bmiHeader.biClrImportant = 0;
}
HDC h_dc = GetDlgItem(ID)->GetDC()->GetSafeHdc();
CRect BoxSize;
GetDlgItem(ID)->GetClientRect(&BoxSize);
SetStretchBltMode(
h_dc, // handle to device context
HALFTONE);
int jj = StretchDIBits(h_dc, BoxSize.left, BoxSize.top, BoxSize.Width(), BoxSize.Height(), 0, 0, src.cols, src.rows, (void *)src.data,
(BITMAPINFO*)pBmpInfo1, DIB_RGB_COLORS, SRCCOPY);
delete[]pBmpInfo1;
return;
}
catch (...)
{
return;
}
}