19,468
社区成员
发帖
与我相关
我的任务
分享
#include "atlImage.h"
/**
* 在目标DC的目标矩形rc中显示pJpeg文件的JPEG图象,并保存为bmp
*/
void DisplayJpeg( char *pJpgeFile,HDC hdc,RECT & rc )
{
/**
* imag对象从pJpgeFile文件中加载图像并绘制到目标DC的目标矩形rc中
*/
CImage imag;
imag.Load( pJpgeFile );
imag.Draw( hdc, rc );
/**
* 保存为bmp图片
*/
imag.Save( "c:\\1.bmp" );
}
void CMenuDlg::LoadPictureFromFile(LPCTSTR szFile, CBitmap *pBitmap)//szFile是jpg文件名,打开时最好到debug目录下,避免路径错误
{
// open file
HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
// _ASSERTE(INVALID_HANDLE_VALUE != hFile);
// get file size
DWORD dwFileSize = GetFileSize(hFile, NULL);
_ASSERTE(-1 != dwFileSize);
LPVOID pvData = NULL;
// alloc memory based on file size
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
_ASSERTE(NULL != hGlobal);
pvData = GlobalLock(hGlobal);
_ASSERTE(NULL != pvData);
DWORD dwBytesRead = 0;
// read file and store in global memory
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
_ASSERTE(FALSE != bRead);
GlobalUnlock(hGlobal);
CloseHandle(hFile);
LPSTREAM pstm = NULL;
// create IStream* from global memory
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm);
// Create IPicture from image file
LPPICTURE gpPicture;
hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release();
OLE_HANDLE m_picHandle;
gpPicture->get_Handle(&m_picHandle);
pBitmap->DeleteObject();
pBitmap->Attach((HGDIOBJ) m_picHandle);
}