当前位置: 代码迷 >> WinCE >> IImaging接口怎么使用
  详细解决方案

IImaging接口怎么使用

热度:206   发布时间:2016-04-28 13:51:21.0
IImaging接口如何使用?
大家好,我在evc4.0上编程想用Imaging.Dll来实现bmp转换为jpeg,可不知道如何使用?我按照http://www.diybl.com/course/3_program/c++/cppjs/20100630/289261.html 上讲的进行了编程,可是build时发现error C2061: syntax error : identifier 'IImagingFactory',我想问下大家我的工程下只有dll,而没有Imaging。lib,我添加了#include "initguid.h"
#include "imaging.h"
#pragma comment(lib,"Imaging.lib")
谁能帮个忙?或者说,能给个Imaging。dll与Imanging。lib资源,或者使用到这两个东西的成功例子也可以。谢谢了

------解决方案--------------------
C/C++ code
/*******************************************************函数介绍:将文件加载到内存流中参数:[in]tszFilename,表示要打开的文件      [out]ppStream,表示内存流,将文件中的内容输出到此内存流中返回值:S_OK表示成功,否则失败*******************************************************/HRESULT CreateStreamOnFile(const TCHAR* tszFilename,IStream** ppStream){    HRESULT hrRet = S_FALSE;    HGLOBAL hg = NULL;    HANDLE hFile = NULL;    DWORD dwSize,dwRead;    BYTE* pbLocked = NULL;    //打开bmp文件    hFile = CreateFile(tszFilename,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);    if(INVALID_HANDLE_VALUE == hFile)    {        goto error;    }    //得到文件大小    dwSize = GetFileSize(hFile,NULL);    if(0xffffffff == dwSize)    {        goto error;    }    //分配内存    hg = GlobalAlloc(GMEM_MOVEABLE,dwSize);    if(NULL == hg)    {        goto error;    }    //得到已经分配的内存指针    pbLocked = (BYTE*)GlobalLock(hg);    if(NULL == pbLocked)    {        goto error;    }    //读取文件内容到内存中    if(!ReadFile(hFile,pbLocked,dwSize,&dwRead,NULL))    {        goto error;    }    //解锁已经分配的全局内存,对应于GlobalLock(hg);    GlobalUnlock(hg);    //创建Stream对象    hrRet = CreateStreamOnHGlobal(hg,TRUE,ppStream);    //关闭文件流    CloseHandle(hFile);    return hrRet;    //错误处理error:    if(pbLocked)        GlobalUnlock(hg);    if(hg)        GlobalFree(hg);    if(hFile)        CloseHandle(hFile);    return hrRet;}/***************************************************函数介绍:根据编码器类型名称得到指定的编码器CLSID参数:[in] pImagingFactory,Image接口对象      [in] wszMimeType,Image编码格式名称      [out] pclsid,编码器的CLSID返回值:TRUE:成功;FALSE:失败***************************************************/BOOL GetEncodecCLSID(IImagingFactory* pImagingFactory,WCHAR* wszMimeType,CLSID* pclsid){    UINT uiCount;    ImageCodecInfo *codecs;    HRESULT hr;    BOOL fRet = FALSE;    //枚举系统已经安装的编码器    hr = pImagingFactory->GetInstalledEncoders(&uiCount,&codecs);    //查找指定格式编码器的CLSID    for(UINT i = 0; i < uiCount; i++)    {        if(wszMimeType && !wcscmp(wszMimeType, codecs[i].MimeType))        {            *pclsid = codecs[i].Clsid;            fRet = TRUE;            break;        }    }    //释放内存    CoTaskMemFree(codecs);    return fRet;}
------解决方案--------------------
C/C++ code
/*******************************************************函数介绍:将文件加载到内存流中参数:[in]tszFilename,表示要打开的文件      [out]ppStream,表示内存流,将文件中的内容输出到此内存流中返回值:S_OK表示成功,否则失败*******************************************************/HRESULT CreateStreamOnFile(const TCHAR* tszFilename,IStream** ppStream){    HRESULT hrRet = S_FALSE;    HGLOBAL hg = NULL;    HANDLE hFile = NULL;    DWORD dwSize,dwRead;    BYTE* pbLocked = NULL;    //打开bmp文件    hFile = CreateFile(tszFilename,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);    if(INVALID_HANDLE_VALUE == hFile)    {        goto error;    }    //得到文件大小    dwSize = GetFileSize(hFile,NULL);    if(0xffffffff == dwSize)    {        goto error;    }    //分配内存    hg = GlobalAlloc(GMEM_MOVEABLE,dwSize);    if(NULL == hg)    {        goto error;    }    //得到已经分配的内存指针    pbLocked = (BYTE*)GlobalLock(hg);    if(NULL == pbLocked)    {        goto error;    }    //读取文件内容到内存中    if(!ReadFile(hFile,pbLocked,dwSize,&dwRead,NULL))    {        goto error;    }    //解锁已经分配的全局内存,对应于GlobalLock(hg);    GlobalUnlock(hg);    //创建Stream对象    hrRet = CreateStreamOnHGlobal(hg,TRUE,ppStream);    //关闭文件流    CloseHandle(hFile);    return hrRet;    //错误处理error:    if(pbLocked)        GlobalUnlock(hg);    if(hg)        GlobalFree(hg);    if(hFile)        CloseHandle(hFile);    return hrRet;}/***************************************************函数介绍:根据编码器类型名称得到指定的编码器CLSID参数:[in] pImagingFactory,Image接口对象      [in] wszMimeType,Image编码格式名称      [out] pclsid,编码器的CLSID返回值:TRUE:成功;FALSE:失败***************************************************/BOOL GetEncodecCLSID(IImagingFactory* pImagingFactory,WCHAR* wszMimeType,CLSID* pclsid){    UINT uiCount;    ImageCodecInfo *codecs;    HRESULT hr;    BOOL fRet = FALSE;    //枚举系统已经安装的编码器    hr = pImagingFactory->GetInstalledEncoders(&uiCount,&codecs);    //查找指定格式编码器的CLSID    for(UINT i = 0; i < uiCount; i++)    {        if(wszMimeType && !wcscmp(wszMimeType, codecs[i].MimeType))        {            *pclsid = codecs[i].Clsid;            fRet = TRUE;            break;        }    }    //释放内存    CoTaskMemFree(codecs);    return fRet;}
  相关解决方案