GDI+学习及代码总结之------图像的编码与解码

一、获取编、解码器信息

获取编码器信息

开发人员可以使用诸如GetImageEncodes来获取系统可用的编码器,用GetImageDecodes来获得系统可用的解码器;由于这两个函数都是一样的,所以我们只看GetImageEncodes函数的定义就好了;

Status GetImageEncoders(
  UINT numEncoders,
  UINT size,
  ImageCodecInfo* encoders
);
参数说明:
numEncodes:[in]
系统支持的编码器总数,该值可以使用GetImageEncodersSize函数来获取。
size:[in]描述所有编码器的详细信息所需要的空间大小,该值由GetImageEncodersSize函数来获取。
encodes[out]ImageCodecInfo数组,描述所返回的编码器的详细信息;

这里又涉及到了几个新的函数,一个个来看:
Status GetImageEncodersSize(
  UINT* numEncoders, 
  UINT* size
);
参数说明:
numEncodes:[out]返回的编码器总数。
size:[out]描述由函数返回的所有编码器信息所需要的空间大小(以字节为单位)。
这两个参数是GetImageEncodes函数所必须的;

再来看最后一个ImageCodecInfo类,该类没有任何方法,所有的都是数据成员,这些数据成员描述了编码器的详细信息,其数据成员如下;


代码示例:
FontFamily ff(L"宋体");
Font font(&ff,20,FontStyleRegular,UnitPixel);

UINT num;
UINT size;
ImageCodecInfo *pImageCodecInfo;
GetImageEncodersSize(&num,&size);
//获取编码器数组
pImageCodecInfo=(ImageCodecInfo*)malloc(size);
GetImageEncoders(num,size,pImageCodecInfo);
//打印显示
CStringW temp,info;
for(UINT j=0;j<num;j++){
	temp.Format(L"编码器名称:%s\t文件格式扩展名:%s\t;\n",pImageCodecInfo[j].CodecName,pImageCodecInfo[j].FilenameExtension);
	info+=temp;
}
free(pImageCodecInfo);
graphics.DrawString(info,-1,&font,PointF(0,0),NULL,&SolidBrush(Color::Green));

获取解码器信息
上面提取获取解码器信息是用GetImageDecodes函数,但另一点没讲,就是此函数的num,size是用对应的GetImageDecodersSize函数来获取的,先看下GetImageDecodes的定义:
Status GetImageDecoders(
  UINT numDecoders,
  UINT size,
  ImageCodecInfo* decoders
);
参数说明:与GetImageEncoders参数相同;
numDecodes:[in]系统支持的编码器总数,该值可以使用GetImageDecodersSize函数来获取。
size:[in]描述所有编码器的详细信息所需要的空间大小,该值由GetImageDecodersSize函数来获取。
encodes[out]ImageCodecInfo数组,描述所返回的编码器的详细信息;

GetImageDecodersSize函数:
Status GetImageDecodersSize(
  UINT* numDecoders,
  UINT* size
);
参数说明:
numEncodes:[out]返回的解码器总数。
size:[out]描述由函数返回的所有解码器信息所需要的空间大小(以字节为单位)。
这两个参数是GetImageDecodes函数所必须的;

示例:(枚举系统中的解码器信息)
FontFamily ff(L"宋体");
Font font(&ff,20,FontStyleRegular,UnitPixel);

UINT num;
UINT size;
ImageCodecInfo *pImageCodecInfo;
GetImageDecodersSize(&num,&size);
//获取编码器数组
pImageCodecInfo=(ImageCodecInfo*)malloc(size);
GetImageDecoders(num,size,pImageCodecInfo);
//打印显示
CStringW temp,info;
for(UINT j=0;j<num;j++){
	temp.Format(L"解码器名称:%s\t文件格式扩展名:%s\t;\n",pImageCodecInfo[j].CodecName,pImageCodecInfo[j].FilenameExtension);
	info+=temp;
}
free(pImageCodecInfo);
graphics.DrawString(info,-1,&font,PointF(0,0),NULL,&SolidBrush(Color::Green));

















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值