IImage COM组件图片显示

IImage COM组件图片显示  

2011-04-27 08:56:58|  分类: 实时操作系统|举报|字号 订阅

       在Wince中不能使用SHLoadImageFile方法显示GIF、PNG、ICO、BMP、JPG等格式,此方法只被Windows Mobile支持。所以要在Wince中显示这是格式的图片就得使用IImage组件。在使用这个组件时需要特别注意以下几点:

      1. 添加#include "initguid.h" 和#include "imaging.h"两个头文件,并且一定要注意顺序。#include "initguid.h"一定要在#include "imaging.h"之前。如果不包含"initguid.h"或在#include "imaging.h"之后,或者这两个头文件在应用代码的头文件之后,则编译时会出现错误,所以在使用此组件时一定要注意头文件的位置
     TempApp.obj : error LNK2001: unresolved external symbol CLSID_ImagingFactory
     TempApp.obj : error LNK2001: unresolved external symbol IID_IImagingFactory 

     2. 需要在编译连接中添加Imaging.lib静态库。

IImage COM组件图片显示 - 我心永恒 - ARM-实践者

添加静态库

        3. 程序代码如下:

HRESULT hr;           // 返回结果
 IImagingFactory * pImagingFactory = NULL;  // Image 接口对象
 IImage * pImage = NULL;
 LPCTSTR szFileName = L"\\Storage Card\\Photo\\test.jpg";

 // 初始化COM环境
 if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
 {
  TRACE(L"COINIT_MULTITHREADED ERROR");
  return ;
 }

 // 得到Image 接口对象
 hr = CoCreateInstance(CLSID_ImagingFactory,
  NULL,
  CLSCTX_INPROC_SERVER,
  IID_IImagingFactory,
  (void **)&pImagingFactory);

 if (FAILED(hr))
 {
  TRACE(L"IMAGE FACTORY CREATED ERROR");
  goto finish;
 }

 // 加载图像文件到IImage接口对象
 hr = pImagingFactory->CreateImageFromFile(szFileName,&pImage);

 if (FAILED(hr))
 {
  TRACE(L"IMAGE FACTORY CREATED ERROR");
  goto finish;
 }

 // 开始绘制图像
 // 得到设备环境
 CDC *pDC = GetDC();

 // 定义绘制尺寸
 RECT rect;
 GetClientRect(&rect);

 // 绘制图片
 pImage->Draw(pDC->m_hDC,&rect,NULL);

 // 释放设备环境
 ReleaseDC(pDC);

finish:
 // 释放IImage接口对象
 if (pImage)
 {
  pImage->Release();
 }

 // 释放IImagingFactory接口对象
 if (pImagingFactory)
 {
  pImagingFactory->Release();
 }

 // 释放程序占用的COM资源
 CoUninitialize();

      4. 运行结果如下:

IImage COM组件图片显示 - 我心永恒 - ARM-实践者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值