C++显示JPG图片

       ::CoInitialize(NULL);  // COM 初始化
	HRESULT hr;
	CFile file;

	file.Open( "c:\\aa.jpg", CFile::modeRead | CFile::shareDenyNone );  // 读入文件内容
	DWORD dwSize = file.GetLength();
	HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
	LPVOID lpBuf = ::GlobalLock( hMem );
	file.Read( lpBuf, dwSize );
	file.Close();
	::GlobalUnlock( hMem );

	IStream * pStream = NULL;
	IPicture * pPicture = NULL;

	// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
	hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
	ASSERT ( SUCCEEDED(hr) );

	hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
	ASSERT(hr==S_OK);

	long nWidth,nHeight;  // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
	pPicture->get_Width( &nWidth );    // 宽
	pPicture->get_Height( &nHeight );  // 高

	原大显示//
	//CSize sz( nWidth, nHeight );
	//pDC->HIMETRICtoDP( &sz );  // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
	//pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy,
	//	0,nHeight,nWidth,-nHeight,NULL);

	按窗口尺寸显示
	CRect rect;	GetClientRect(&rect);
	pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(),
		0,nHeight,nWidth,-nHeight,NULL);

	if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
	if ( pStream ) pStream->Release();  // 释放 IStream 指针,同时释放了 hMem

	::CoUninitialize();


 
 

你可能感兴趣的:(C,C++,MFC)