void CshowimageDlg::ShowImg(Mat &img, UINT ID)

20 篇文章 0 订阅
18 篇文章 0 订阅
void CshowimageDlg::ShowImg(Mat &img, UINT ID)
{
	CDC *pDC = GetDlgItem(ID)->GetDC();


	CRect rect;
	GetDlgItem(ID)->GetClientRect(rect);
	RECT* pRect=▭
	if( pDC && pRect && !img.empty() )
	{
		uchar buffer[sizeof(BITMAPINFOHEADER) + 1024];
		BITMAPINFO* bmi = (BITMAPINFO*)buffer;
		int bmp_w = img.cols, bmp_h = img.rows;
		BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);
		memset( bmih, 0, sizeof(*bmih));
		bmih->biSize = sizeof(BITMAPINFOHEADER);
		bmih->biWidth = bmp_w;
		bmih->biHeight = -bmp_h;// : -abs(height);
		bmih->biPlanes = 1;
		bmih->biBitCount = IPL_DEPTH_8U*img.channels();
		bmih->biCompression = BI_RGB;


		if( IPL_DEPTH_8U*img.channels() == 8 )
		{
			RGBQUAD* palette = bmi->bmiColors;
			int i;
			for( i = 0; i < 256; i++ )
			{
				palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i;
				palette[i].rgbReserved = 0;
			}
		}


		if(pRect->right - pRect->left +1 < bmp_w )
		{
			SetStretchBltMode(
				pDC->m_hDC,           // handle to device context
				HALFTONE );
		}
		else
		{
			SetStretchBltMode(
				pDC->m_hDC,           // handle to device context
				COLORONCOLOR );
		}


		if(img.cols % 4 != 0 && img.isContinuous())
		{
			IplImage *tempimg = cvCreateImage(img.size(), 8, img.channels());
			img.copyTo(Mat(tempimg));


			::StretchDIBits(
				pDC->m_hDC,
				pRect->left, pRect->top, pRect->right - pRect->left+1, pRect->bottom - pRect->top+1,
				0, 0, bmp_w, bmp_h,
				tempimg->imageData, bmi, DIB_RGB_COLORS, SRCCOPY );


			cvReleaseImage(&tempimg);
		} 
		else
		{
			::StretchDIBits(
				pDC->m_hDC,
				pRect->left, pRect->top, pRect->right - pRect->left+1, pRect->bottom - pRect->top+1,
				0, 0, bmp_w, bmp_h,
				img.data, bmi, DIB_RGB_COLORS, SRCCOPY );


		}


	}
	return;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值