您的位置:首页 > 其它

MFC处理jpg等格式图片 Cpicture(二)

2013-08-20 03:06 309 查看
MFC处理jpg等格式图片(二)

CPicture 类简介:

大概流程:通过IPicture接口实现图片的各种操作

1

IPicture 实现各种图片加载三部曲

1定义两个类指针

IStream *pIStream;//创建一个IStream接口指针,用来保存图片流

IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象

2 OleLoadPicture()从流中加载数据构成IPicture对象(将数据流合成IPicture对象)

OleLoadPicture(pIStream,0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针

3展示你的劳动成果 hDC为设备上下文

pIPicture->Render(hDC,0,0,theRect.Width(),theRect.Height(),0,hmHeight,hmWidth,-hmHeight,NULL);//在指定的DC上绘出图片

2 关于流大家感到不是很客观 :大家可能对一张具体的图片 或文件更加直接

所以提供这么多接口供选择

//Load frm various sosurces

BOOL Load(UINT nIDRes); //根据加载的图片ID(一般为位图)

BOOL Load(LPCTSTR pszPathName) //图片路径例如”D://1.jgp”

BOOL Load(CFile& file); //一个文件类(已经与一个文件关联了)

BOOL Load(CArchive& ar); //他的对象可以理解为二进制流

BOOL Load(IStream* pstm); //流

BOOL Load(char *pBuffer, int nSize); //文本文件字符数据

所以封装好流 我们提供你一个文件路径……你就可以完成图片的加载显示而不用去理会那流了

现在出场的是IPicture

我们主要是封装他的

CComQIPtr<IPicture>m_spIPicture; // ATL smart pointer to IPicture

看到这句代码。可能有所不理解 你就理解为IPicture * m_spIPicture
就行了

至于具体:他其实是一个智能指针:百度

具体代码看

1如何将CFile CArchive转化为流的

主要流程是:

CFile-> CArchive-> CArchiveStream-> IStream

CArchivear(&file, CArchive::load | CArchive::bNoFlushOnDelete);

CArchiveStreamarcstream(&ar);

Load((IStream*)&arcstream);

2如何将char*转化为流的呢?

HGLOBALhGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize); 给图片分配全局内存

void*pData = GlobalLock(hGlobal);锁定内存

GlobalUnlock(hGlobal);解锁内存

CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);用全局内存初使化IStream接口指针

总结:所以Cpicture 主要封装了Istream流的产生

关于Cpicture源代码:

点击

CSDN CPicture类源代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: