mfc 选择文件并显示

void CtestSendDlg::FillBitmapInfo(BITMAPINFO* bmi, int width, int height, int bpp)
{
	ASSERT(bmi && width>0 && height>0 && (bpp==8 || bpp==24 || bpp==32));


	BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);

	memset((void *)bmih, 0x00, sizeof(BITMAPINFOHEADER));
	bmih->biSize = sizeof(BITMAPINFOHEADER);
	bmih->biWidth = width;
	bmih->biHeight = -abs(height);
	bmih->biPlanes = 1;
	bmih->biBitCount = bpp;
	bmih->biCompression = BI_RGB;

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


void CtestSendDlg::DisplayOpencvImg(IplImage *pImg, HDC hdc, CRect& rect )
{
	 BITMAPINFO bmi;

	FillBitmapInfo( &bmi, pImg->width, pImg->height, 24 );

	if(bmi.bmiHeader.biBitCount== 8)
	{
		HPALETTE hpal=NULL;
		HPALETTE hOldPal=NULL;
		::SetPaletteEntries(hpal,0,256,(LPPALETTEENTRY)bmi.bmiColors);
		hOldPal = ::SelectPalette(hdc, hpal, TRUE);
	}

	::SetStretchBltMode(hdc, COLORONCOLOR);
	::StretchDIBits(hdc,rect.left,rect.top,rect.Width(),rect.Height(),0,0,
		pImg->width,pImg->height,pImg->imageData,&bmi,DIB_RGB_COLORS,SRCCOPY); 
}


 
void CtestSendDlg::OnBnClickedButtonImg()
{
	// TODO: 在此添加控件通知处理程序代码


	CString FilePathName;
	CFileDialog filedlg(true); //显示打开对话框


	filedlg.m_ofn.lpstrTitle="打开";
	filedlg.m_ofn.lpstrFilter="所有图片文件(*.bmp;*.jpg;*.jpeg;*.png)|*.bmp;*.jpg;*.jpeg;*.png|位图文件(*.bmp)|*.bmp|JPEG(*.jpg;*.jpeg)|*.jpg;*.jpeg|PNG(*.png)|*.png";


	if(IDOK == filedlg.DoModal())
    {
		FilePathName=filedlg.GetPathName();
		IplImage* srcImg = cvLoadImage( FilePathName );
		if( !srcImg )
		{
			AfxMessageBox( "你选择的不是照片" );
			return;
		}


		GetDlgItem(IDC_EDIT_PATH)->SetWindowTextA(FilePathName.GetBuffer());


		//取出文件路径,将文件的路径放入FilePath 
		UpdateData(FALSE);


		CRect   rect;


		CWnd *pWnd = NULL;
		pWnd = GetDlgItem(IDC_SHOW_IMG);//获取控件句柄   
		pWnd->GetClientRect(&rect);//获取句柄指向控件区域的大小   


		CDC *pDc = NULL;
		pDc = pWnd->GetDC();//获取picture的DC


		GetDlgItem(IDC_EDIT_PATH)->GetWindowTextA(FilePathName);
		IplImage* dstImg = cvCreateImage( cvSize( rect.right, rect.bottom ), srcImg->depth, srcImg->nChannels );


		cvResize( srcImg, dstImg );
		DisplayOpencvImg( dstImg, *pDc, rect );


		cvReleaseImage( &srcImg );
		cvReleaseImage( &dstImg );
		ReleaseDC(pDc); 
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值