WEB开发网
开发学院软件开发VC VC实现多格式图像的转换 阅读

VC实现多格式图像的转换

 2008-11-13 19:31:53 来源:WEB开发网   
核心提示: 访问注册表编码信息上面说到GDI+是通过在注册表中查看编码信息来访问图像文件的,在GDI+的SDK中,VC实现多格式图像的转换(2),编码信息是存储在 ImageCodecInfo类中的,在这个类中,//存储编码器信息所需内存(由ImageCodecInfo类组成的数组的大小)ImageC

访问注册表编码信息

上面说到GDI+是通过在注册表中查看编码信息来访问图像文件的,在GDI+的SDK中,编码信息是存储在 ImageCodecInfo类中的,在这个类中,有编码的CLSID(COM组件的GUID标识码)、编码方式描述等。对于GDI,在注册表中访问编码信息通常使用以下两个函数来实现:

1. 查看系统中可用的图像编码信息(数量及大小)

Status GetImageEncodersSize(
UINT* numEncoders,
//存储编码器数量的地址
UINT* size //存储编码信息所需内存大小
);

2. 得到所有的编码信息

Status GetImageEncoders(
UINT numEncoders,//可用编码器数量
UINT size,//存储编码器信息所需内存(由ImageCodecInfo类组成的数组的大小)
ImageCodecInfo* encoders//编码器信息指针
);

在GetImageEncoders函数中,参数numEncoders和size都是由GetImageEncodersSize返回的。下面的代码在注册表中查找具体格式图像的编码方式:

int GetImageCLSID(const WCHAR* format, CLSID* pCLSID)
{ //得到格式为format的图像文件的编码值,访问该格式图像的COM组件的GUID值保存在pCLSID中
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return FALSE; // 编码信息不可用
//分配内存
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return FALSE; // 分配失败
//获得系统中可用的编码方式的所有信息
GetImageEncoders(num, size, pImageCodecInfo);
//在可用编码信息中查找format格式是否被支持
for(UINT i = 0; i < num; ++i)
{ //MimeType:编码方式的具体描述
if( wcscmp(pImageCodecInfo[i]
.MimeType, format) == 0 )
{
*pCLSID = pImageCodecInfo[i]
.Clsid;
free(pImageCodecInfo);
return TRUE;
}
}
free(pImageCodecInfo);
return FALSE;
}

上一页  1 2 3 4  下一页

Tags:VC 实现 格式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接