找回密码
 注册
搜索
查看: 4187|回复: 0

[收藏]读取JPEG和GIF图像的简单方法

[复制链接]
发表于 2004-2-10 19:45:39 | 显示全部楼层 |阅读模式
CString strName; // 文件名 . G% d9 g$ R$ J, \! D0 n6 d
HDC hDC; // 绘图句柄
: A0 b) B1 p7 n) y  M& P1 \. {5 l// 打开文件
6 F$ V' ]9 e+ C+ E4 `/ THANDLE hFile; ! |" Q# v+ }; w; T, }
if( ( hFile = ::CreateFile( strName ,true ) ), GENERIC_READ, FILE_SHARE_READ
. R4 u8 V: L& V, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL
  F6 _" a/ n2 D- Y; _( ]) ) != INVALID_HANDLE_VALUE ) 8 X, R$ ]0 K% I
{ 1 [& n$ m, n2 T! V# p5 h* j
// 创建文件流
% _( r9 Q  i/ {DWORD dwSize = DWORD( ::GetFileSize( hFile, NULL ) ); 2 u5 }/ C7 j; L  p
ASSERT( dwSize != -1 ); ; B( Q- Y* C: Q7 u( L
HGLOBAL hMemory = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
) p! _0 i, V, Q2 d: aASSERT( hMemory != NULL ); 3 p2 z+ g' B2 v
LPVOID pData = ::GlobalLock( hMemory );
6 S8 S1 ?) r/ d! _) ^& `6 L( U4 C: OASSERT( pData != NULL ); 9 g% m. Y+ s+ }
DWORD dwCount;
% R# M  R8 R( j, n' d) g& Q; n+ R3 c  `1 Q::ReadFile( hFile, pData, dwSize, &dwCount, NULL );
& F+ Q& c2 c5 L* A: I/ t::GlobalUnlock( hMemory );
7 K" d6 U" g+ k) I$ Y1 vIStream * pStream = NULL;
5 O. n! V5 A* Q8 a' p+ j6 Q::CreateStreamOnHGlobal( hMemory, TRUE, &pStream );
) q- `; @" c8 t+ Y9 VASSERT( pStream != NULL );
0 t2 n7 S3 \6 h1 F// 从流中装入图片
& k7 o& m8 [9 P% V0 YIPicture * pPicture = NULL;
. y5 B& ]$ ~0 T& U; ~8 A9 gif( SUCCEEDED( ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,( LPVO
" R' Z9 Q' ?% W& fID* )&pPicture ) ) )
% K% Y; w: w  g9 u0 ^. a, Z7 W{
" V' S- I4 X3 ]) |// 向DC中绘图 , S0 R/ u: ]( `* I: y* l. e6 I
OLE_XSIZE_HIMETRIC hmWidth;
  a+ i; _  X7 @* QOLE_YSIZE_HIMETRIC hmHeight;
& E! i) \3 Q: q4 T3 N6 bpPicture->get_Width( &hmWidth ); # i/ C2 p0 P0 `# O" p9 J, N/ X) T) V
pPicture->get_Height( &hmHeight ); + ~8 E# m7 b9 r
pPicture->Render( hDC, 0, 0, 300, 300, 0, hmHeight, hmWidth, -hmHeight, NU
4 S5 S8 f/ p8 p9 pLL ); 8 O0 M3 c+ M: Q3 N' m
pPicture->Release();
& _. @+ N' H+ C9 @4 g7 z/ e} ; N: g( r$ q: }! g5 y6 w
// 释放流和文件
, A* v6 v) L! O9 _pStream->Release();
& U% i" J& B- A# S::CloseHandle( hFile ); ) ~: i" j* D. p* I
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-8-15 10:25 , Processed in 0.017483 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表