博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IPicture总结
阅读量:7291 次
发布时间:2019-06-30

本文共 1958 字,大约阅读时间需要 6 分钟。

1、利用IPicture接口加载、显示图片

IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口是IPicture和IPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSDN,一般创建图片对象可以用OleLoadPicture函数,它简化了基于流内容创建图片对象。

IPicture接口管理一个图片对象和它的属性。图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持。图像对象的主要接口是IPicture和IPictureDisp。IPictureDisp从IDispatch继承,提供了通过自动化访问图片属性的能力。图片对象可通过OleCreatePictureIndirect创建。关于IPicture支持的其他接口和方法可以看MSDN,一般创建图片对象可以用OleLoadPicture函数,它简化了基于流内容创建图片对象。下面的代码中有两个未定义的变量是FilePath和hDC。

//FilePath是从外部传入的图片路径//打开文件HANDLE hFile = CreateFile(FilePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);_ASSERTE(INVALID_HANDLE_VALUE != hFile);//取文件大小DWORD dwFileSize = GetFileSize(hFile, NULL);_ASSERTE(-1 != dwFileSize);LPVOID pvData = NULL;//分配内存,准备读入图片文件的数据//GlobalAlloc从堆分配指定字节的内存区域HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);_ASSERTE(NULL != hGlobal);//GlobalLock函数锁住一个全局的内存对象同时返回一个指向对象首字节的指针pvData = GlobalLock(hGlobal);_ASSERTE(NULL != pvData);DWORD dwBytesRead = 0;//读取文件的数据到分配的全局内存BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);_ASSERTE(FALSE != bRead);GlobalUnlock(hGlobal);CloseHandle(hFile);

  到此,我们已经把文件的数据读到了内存当中

LPSTREAM pstm = NULL;//从全局内存创建IStream接口指针HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);_ASSERTE(SUCCEEDED(hr) && pstm);//根据图片文件创建IPicture接口指针hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);_ASSERTE(SUCCEEDED(hr) && gpPicture); pstm->Release();

  至此,IPicture接口建立好,下面开始画图片

//hDC是外部传入的画图设备long hmWidth;long hmHeight;gpPicture->get_Width(&hmWidth);gpPicture->get_Height(&hmHeight);//转换himetric距离为pixels距离,1英寸=25.4毫米int nWidth = MulDiv(hmWidth, GetDeviceCaps(hDC, LOGPIXELSX), 2540);int nHeight = MulDiv(hmHeight, GetDeviceCaps(hDC, LOGPIXELSY), 2540);RECT rc;GetClientRect(hWnd, &rc);//IPicture::Render显示图片gpPicture->Render(hDC, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc);

见程序:PBMS  图书管理程序

转载地址:http://cqrjm.baihongyu.com/

你可能感兴趣的文章
装机流程
查看>>
练习题7
查看>>
简单的nginx启动脚本
查看>>
我的友情链接
查看>>
React Native集成到Android项目当中
查看>>
cd ls
查看>>
linux学习命令总结⑩①
查看>>
【好程序员笔记分享】C语言之交换变量的值
查看>>
linux 安装和初级优化
查看>>
C#系列-多样化的程序分支[7]
查看>>
Keepalived配置文件详解(以Haproxy作为负载均衡器)
查看>>
megacli创建RAID10过程详解
查看>>
Linux系统引导过程
查看>>
【apache】mod_proxy 和 mod_rewrite实现js跨域
查看>>
林锐博士谈考研
查看>>
Vant Weapp小程序蹲坑之使用checkbox组件
查看>>
重载operator<<运算符时第二个参数最好不要写成指向对象的指针
查看>>
在ubuntu上编译 wpa_supplicant-2.6
查看>>
68ES6_解构_数组操作_对象操作
查看>>
poj——1470 Closest Common Ancestors
查看>>