wince中显示BMP、JPG、Gif以及PNG的方法
2008-03-10 23:31
399 查看
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”
飞狐作一个简单概括,并给出源代码。
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”
相关文章推荐
- wince中显示BMP、JPG、Gif以及PNG的方法
- wince中显示BMP、JPG、Gif以及PNG的方法
- delphi显示 jpg、png、gif 图片及 gif 动画的方法
- C++中使用CAtlHttpClient显示网络图片的方法,支持png,bmp,gif图片格式
- win mobile 5显示jpg,png,gif图片的方法--5mbox的图片库封装
- VC++ 2005中显示jpg,bmp,gif图像的方法
- VC中导入图像(BMP,JPG,GIF)并显示的方法
- 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)
- C++中使用CAtlHttpClient显示网络图片的方法,支持png,bmp,gif图片格式
- VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法
- 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)
- WINCE 如何显示PNG和GIF图片
- 获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP
- VC下显示JPG,GIF图象的一种简便方法
- 各种图片格式(BMP,JPG, GIF,PNG, TGA) 简单介绍
- JPG png GIF BMP四种常见图像格式的区别
- png\jpg图像在windows的显示方法
- WinCE显示资源中BMP图片的几种方法
- delphi 中 image 控件加载bmp、JPG、GIF、PNG等图片的办法
- WTL基础: 显示图片(JPG, BMP, PNG, TIF等)