找回密码
 注册
查看: 4219|回复: 0

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

[复制链接]
发表于 2004-2-10 19:45:39 | 显示全部楼层 |阅读模式
CString strName; // 文件名
0 m" q0 R  J4 D  N( rHDC hDC; // 绘图句柄 * n: ]1 r3 o" P# \6 A! w1 N
// 打开文件 ; J" D0 g) z6 E2 Y6 T8 W
HANDLE hFile; 4 V9 H5 w; y5 @1 h* A4 o4 y. e
if( ( hFile = ::CreateFile( strName ,true ) ), GENERIC_READ, FILE_SHARE_READ
8 a0 s7 a- w( T# d, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL
2 z: x; `% j( o. R! I) E1 c# J) ) != INVALID_HANDLE_VALUE )
- p8 G! {. ^" i" q7 `  m# E{
9 i3 Y9 M- U, u// 创建文件流
9 T7 g2 b, ^! P5 @& k# N) b! M3 tDWORD dwSize = DWORD( ::GetFileSize( hFile, NULL ) ); 0 e; T2 P: f1 h6 Q
ASSERT( dwSize != -1 ); ' U* `) D# E8 l# o* H5 R
HGLOBAL hMemory = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
. ~% u) q0 ]- a) w+ k/ L% J) fASSERT( hMemory != NULL );
7 z$ G/ i/ f# |( f; N' _) yLPVOID pData = ::GlobalLock( hMemory );
: D9 L& C) k6 @& _; W# a; n! mASSERT( pData != NULL );
! K! V  u0 A, ~% N9 R0 MDWORD dwCount;
9 ^  ]- f. v# I. }4 Q5 B0 o::ReadFile( hFile, pData, dwSize, &dwCount, NULL );
5 l& Z1 J# u2 F4 [! e$ Q::GlobalUnlock( hMemory ); $ S* B0 }3 ~! H6 b+ E1 b6 e
IStream * pStream = NULL;
& ?; U' `! d/ F$ E" U5 ~::CreateStreamOnHGlobal( hMemory, TRUE, &pStream );
. u5 ?; P$ ?+ X; R% _& `. N- qASSERT( pStream != NULL );
0 ?) v1 W; |- |3 v% t// 从流中装入图片 & M/ U8 W' V4 a4 H; o
IPicture * pPicture = NULL;
0 k7 i5 x# Z5 A  L. b9 rif( SUCCEEDED( ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,( LPVO
5 s+ T0 D0 @+ H  i1 h( CID* )&pPicture ) ) )
7 z6 G- L  d6 c{
9 A! \4 \3 k/ H5 R3 c3 q+ ]// 向DC中绘图 4 @- x( w* ]( _7 F. ~8 ]8 a. b1 {2 J
OLE_XSIZE_HIMETRIC hmWidth;
3 \2 R$ d2 `' Z8 D1 Y5 B% VOLE_YSIZE_HIMETRIC hmHeight; ( {! h, C# {8 x* E2 ^0 L
pPicture->get_Width( &hmWidth ); ) X/ ]/ |. t3 E% t0 ^0 X  q
pPicture->get_Height( &hmHeight ); 9 ^3 ]3 A2 r4 i# Q# a
pPicture->Render( hDC, 0, 0, 300, 300, 0, hmHeight, hmWidth, -hmHeight, NU ' O9 f4 j6 P9 [8 I
LL ); 1 f1 F* y; h0 m0 [' g
pPicture->Release(); & r, {/ V9 q# U" c7 T$ p  b" T, v1 o& d9 u
}
5 W% y5 H* q- g// 释放流和文件 7 T, }9 h% I. f4 k" H) y
pStream->Release();
* N5 X+ i/ h3 s::CloseHandle( hFile ); 1 w# H; J9 u. C) n5 p
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 05:44 , Processed in 0.017387 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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