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

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

[复制链接]
发表于 2004-2-10 19:45:39 | 显示全部楼层 |阅读模式
CString strName; // 文件名 - o6 B( v# u; F1 s# [3 V0 ?
HDC hDC; // 绘图句柄
3 p' `' E. P9 E9 p6 W// 打开文件
4 t+ d1 N$ w9 K; S: V& \* iHANDLE hFile; 9 |3 F. y1 P4 e" z7 H( L
if( ( hFile = ::CreateFile( strName ,true ) ), GENERIC_READ, FILE_SHARE_READ . m& X! X. T, H+ u1 m# ]' K
, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL
+ [8 c/ _: e! O6 d) ) != INVALID_HANDLE_VALUE ) 4 k, c6 p; f* q
{ : T& Y3 Q: g2 D1 j, ^% {
// 创建文件流
/ }$ ^6 v$ z! u; a" UDWORD dwSize = DWORD( ::GetFileSize( hFile, NULL ) ); ; S: A$ S9 C# m) Z" W
ASSERT( dwSize != -1 );
0 I' Y2 S2 i* a$ L: q0 fHGLOBAL hMemory = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
) Y4 W, ^# J* Q8 {3 L& C; F3 GASSERT( hMemory != NULL );
. c3 c) n9 Z6 R( QLPVOID pData = ::GlobalLock( hMemory ); 4 ~( i( G* h. d! X, m3 |
ASSERT( pData != NULL );
; R' j% _( x. v" y3 }& cDWORD dwCount; 6 j5 x% X. g5 ~9 q' x0 u( U1 V
::ReadFile( hFile, pData, dwSize, &dwCount, NULL );
  T( ~2 I) V' u2 h% Q::GlobalUnlock( hMemory );
0 E3 G5 n- g; u+ PIStream * pStream = NULL; % w$ j* ?# l7 I' _
::CreateStreamOnHGlobal( hMemory, TRUE, &pStream );   r$ ?! T: T9 v  a
ASSERT( pStream != NULL ); ) ^" a2 w% y4 k) g% g6 B5 b# y
// 从流中装入图片
9 w6 a) m6 H) h: I; U" _6 y8 rIPicture * pPicture = NULL; ' X+ O* H$ D6 K
if( SUCCEEDED( ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,( LPVO
9 H: ?& m, r' t5 G/ z3 eID* )&pPicture ) ) ) / C; P+ r& J+ k5 o6 l5 e/ I% L
{ ) ?) E6 b! C; a, `1 |& k) {
// 向DC中绘图
- V% @5 m3 C$ T3 v0 _4 c: BOLE_XSIZE_HIMETRIC hmWidth; 3 o# K9 @/ u' Y* J2 ]1 z
OLE_YSIZE_HIMETRIC hmHeight; 1 Y/ ^$ t  _2 S" E' W( X; Z
pPicture->get_Width( &hmWidth );
- J, ?, m! u$ z- zpPicture->get_Height( &hmHeight );
2 v/ R( y% I+ R6 h/ @! M& WpPicture->Render( hDC, 0, 0, 300, 300, 0, hmHeight, hmWidth, -hmHeight, NU
2 m" x5 y# P. N: MLL ); 8 J& p; p7 v+ ]; d6 K
pPicture->Release();
/ L5 a0 y: c2 |/ A0 t$ n! U}
/ h; a4 f* ~. s, F0 ~// 释放流和文件
  _& G/ i' r8 N9 Z7 {+ |pStream->Release();
& ?* c2 z5 n/ t  Y, k::CloseHandle( hFile ); 4 W: a" H' J' ~0 v+ Q5 D  p
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 20:03 , Processed in 0.017643 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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