wince中显示BMP、JPG、Gif以及PNG的方法

 wince中的图片解码方案中,利用Wince的API解码应该是用的非常广泛的。一来实现简单,二来支持多种图片格式(BMP、JPG、PNG、GIF),而且对每一种中的具体格式支持也很好。(微软自己做的,经过了各种样本的测试)。
飞狐作一个简单概括,并给出源代码。
1 确保操作系统中加入了组件,如果没有COM存储和Image的组件(在Wince 的core licence中就提供此组件),那么下面的都是白搭,程序可能都不能启动。
2 添加头文件
#include <INITGUID.h>
#include <imaging.h>
3 制作自己的读取文件函数,此函数返回HBITMAP,需要的地方可以自己放缩以及实现显示效果等等。
HBITMAP LoadImageFromFile(TCHAR * pFileImage)
{
    IImagingFactory *pImgFactory = NULL;
    IImage *pImageBmp = NULL;
    CoInitializeEx(NULL, COINIT_MULTITHREADED);

    HBITMAP hResult = 0;
   
    if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory, NULL,
       CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void **)&pImgFactory)))
    {
   ImageInfo imageInfo;
   HRESULT hr = pImgFactory->CreateImageFromFile(pFileImage, &pImageBmp);
        if (SUCCEEDED(hr)&& SUCCEEDED(pImageBmp->GetImageInfo(&imageInfo)))
        {
       CWindowDC dc(0);
          CDC dcBitmap;
          dcBitmap.CreateCompatibleDC(&dc);
          hResult = CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Width, imageInfo.Height);
          HGDIOBJ  hOldBitmap  =  SelectObject(dcBitmap, hResult);
   //note:内存不足的话,Draw操作可能会失败
          pImage->Draw(dcBitmap,  CRect(0,  0,  stImageInfo.Width, stImageInfo.Height),  NULL); 
          SelectObject(dcBitmap, hOldBitmap);
          DeleteDC(dcBitmap);
          pImageBmp->Release();
        }
        pImgFactory->Release();
    }
    CoUninitialize();
    return hResult;
}
4 局限性:
  A 需要OS组件支持,有的OS上可能没有。
  B 为OS提供的API,不知道具体细节,尤其是对内存的控制不方便。
  C 如果要读取某一图片各种的某一字段,运用此API将不方便,需要自己解码。
原文见 “http://jkflyfox.spaces.live.com/blog/cns!C936FCDDF997BA5F!1508.entry?_c=BlogPart”

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值