读取JPEG和GIF图像的简单方法
CString strName;
//
文件名
HDC hDC; // 绘图句柄
// 打开文件
HANDLE hFile;
if ( ( hFile = ::CreateFile( strName , true ) ), GENERIC_READ, FILE_SHARE_READ
, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL
) ) != INVALID_HANDLE_VALUE )
{
// 创建文件流
DWORD dwSize = DWORD( ::GetFileSize( hFile, NULL ) );
ASSERT( dwSize != -1 );
HGLOBAL hMemory = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
ASSERT( hMemory != NULL );
LPVOID pData = ::GlobalLock( hMemory );
ASSERT( pData != NULL );
DWORD dwCount;
::ReadFile( hFile, pData, dwSize, &dwCount, NULL );
::GlobalUnlock( hMemory );
IStream * pStream = NULL;
::CreateStreamOnHGlobal( hMemory, TRUE, &pStream );
ASSERT( pStream != NULL );
// 从流中装入图片
IPicture * pPicture = NULL;
if( SUCCEEDED( ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,( LPVO
ID* )&pPicture ) ) )
{
// 向DC中绘图
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPicture->get_Width( &hmWidth );
pPicture->get_Height( &hmHeight );
pPicture->Render( hDC, 0, 0, 300, 300, 0, hmHeight, hmWidth, -hmHeight, NU
LL );
pPicture->Release();
}
// 释放流和文件
pStream->Release();
::CloseHandle( hFile );
}
HDC hDC; // 绘图句柄
// 打开文件
HANDLE hFile;
if ( ( hFile = ::CreateFile( strName , true ) ), GENERIC_READ, FILE_SHARE_READ
, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL
) ) != INVALID_HANDLE_VALUE )
{
// 创建文件流
DWORD dwSize = DWORD( ::GetFileSize( hFile, NULL ) );
ASSERT( dwSize != -1 );
HGLOBAL hMemory = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
ASSERT( hMemory != NULL );
LPVOID pData = ::GlobalLock( hMemory );
ASSERT( pData != NULL );
DWORD dwCount;
::ReadFile( hFile, pData, dwSize, &dwCount, NULL );
::GlobalUnlock( hMemory );
IStream * pStream = NULL;
::CreateStreamOnHGlobal( hMemory, TRUE, &pStream );
ASSERT( pStream != NULL );
// 从流中装入图片
IPicture * pPicture = NULL;
if( SUCCEEDED( ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,( LPVO
ID* )&pPicture ) ) )
{
// 向DC中绘图
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pPicture->get_Width( &hmWidth );
pPicture->get_Height( &hmHeight );
pPicture->Render( hDC, 0, 0, 300, 300, 0, hmHeight, hmWidth, -hmHeight, NU
LL );
pPicture->Release();
}
// 释放流和文件
pStream->Release();
::CloseHandle( hFile );
}