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

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

[复制链接]
发表于 2004-2-10 19:45:39 | 显示全部楼层 |阅读模式
CString strName; // 文件名
- x% Y2 L% g/ Q' T2 c4 `HDC hDC; // 绘图句柄
: |( j9 J6 [& C7 o; T// 打开文件 : ?4 l4 q! Q* m% j
HANDLE hFile; : C# N& J- ^0 H" Y& s1 F; g
if( ( hFile = ::CreateFile( strName ,true ) ), GENERIC_READ, FILE_SHARE_READ
7 h8 B* h- N! |4 \4 t, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL
5 F  s) F! ~1 @/ @) ) != INVALID_HANDLE_VALUE ) * e- m$ |: x$ f! g6 K
{ * G9 W" b+ B' _8 v# |; w
// 创建文件流
( y* P$ g6 p9 P" K2 H' aDWORD dwSize = DWORD( ::GetFileSize( hFile, NULL ) );
* E* L( m0 M5 V# t6 h" s* bASSERT( dwSize != -1 ); 7 h: b2 k+ I9 k, ]5 ?, b; x
HGLOBAL hMemory = ::GlobalAlloc( GMEM_MOVEABLE, dwSize ); ; m$ \# ]/ W9 E2 `6 @/ N" C' L9 T
ASSERT( hMemory != NULL ); # {# J# k7 \+ p6 ]% U" \% }: J
LPVOID pData = ::GlobalLock( hMemory ); 0 ]- W3 b1 Q4 b( V% G" o
ASSERT( pData != NULL ); $ @1 `* e% e6 _
DWORD dwCount;
3 v! }/ F+ C  k* C  \1 e+ M0 [  D::ReadFile( hFile, pData, dwSize, &dwCount, NULL ); / h' A' J) {" X
::GlobalUnlock( hMemory );
/ n! ?; d* O5 c1 ~' I4 |6 D' z' ~IStream * pStream = NULL; # l' O/ |' q( V' U& W6 l
::CreateStreamOnHGlobal( hMemory, TRUE, &pStream );
( ~8 n! C' }$ V5 \ASSERT( pStream != NULL ); # `: N! }( w0 X! d* c6 s
// 从流中装入图片
6 m, C- K' ?  d- D  l' cIPicture * pPicture = NULL; , I4 J5 H% f; ?  m$ u& b; N
if( SUCCEEDED( ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture,( LPVO
, f8 _2 u/ W8 e; k+ _% X, t, DID* )&pPicture ) ) )
+ V. L6 v: g0 C: \/ z. s{ + m2 f5 `5 K9 B* X# W7 A
// 向DC中绘图
5 [3 g* \4 K1 w: cOLE_XSIZE_HIMETRIC hmWidth;
8 O( z  k8 y6 w( p) VOLE_YSIZE_HIMETRIC hmHeight; / R& i" g& I  N
pPicture->get_Width( &hmWidth );
8 [- z6 u* G- o& [0 spPicture->get_Height( &hmHeight ); 0 L7 N0 C% H8 }
pPicture->Render( hDC, 0, 0, 300, 300, 0, hmHeight, hmWidth, -hmHeight, NU * b% v* _5 ~! \
LL );
, {0 F" T. m  h  N1 tpPicture->Release();
3 F. \# j; E) |}
' a  }' i. y! F3 h' ?// 释放流和文件
) m" G% z  p( M1 R1 O& {pStream->Release();
# H7 m1 X, W0 v0 @::CloseHandle( hFile );
8 a* d" }# Y/ [3 W) t. o}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 08:31 , Processed in 0.014839 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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