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));
GDI+学习及代码总结之------图像的编码与解码_第1张图片
















你可能感兴趣的:(GDI+学习及代码总结之------图像的编码与解码)