当前位置:C++技术网 > 资讯 > 图形文件的编码与解码的学习3

图形文件的编码与解码的学习3

更新时间:2015-12-13 20:17:32浏览次数:1+次

要将一种格式的文件转换成另一种格式的文件进行保存,只需要找出要保存的格式的图形文件的编码器,并用Image类的Save函数来实现格式的转换。

Status Save(const WCHAR* filename, const CLSID* clsidEncoder, const EncoderParameters* encoderParams);

filename:保存文件的文件名。

clsidEncoder:图形文件的编码器类别标识

encoderParams:图形文件的编码器参数列表

在使用Image类的Save函数时,基本可以按照这样的思路来理解图形文件的保存过程:

如果不使用clsidEncoder参数,Save函数保存的新文件的格式将与源文件一样

如果使用clsidEncoder参数,Save函数将按照默认值保存指定格式的新文件

如果使用clsidEncoder参数和encoderParams参数,Save函数不但可以按照新格式保存文件,而且还可以对新文件的保存格式进行细化,西化的结果取决于参数encoderParams的内容。

代码实现将BMP转换为PNG格式

void C油表View::OnGdiSavabmp2png()
{
	// TODO: 在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	
	CLSID encoderClsid;
	Status stat;
	Image image(L"cos.bmp");
	RectF rect(0, 0, image.GetWidth() / 2, image.GetHeight() / 2);
	graphics.DrawImage(&image, rect);
	/////获取PNG文件的编码方式
	GetEncoderClsid(L"image/png", &encoderClsid);
	/////将BMP保存为PNG文件
	stat = image.Save(L"cos.png", &encoderClsid, NULL);
	if (stat == Ok)
	{
		/////如果PNG文件保存成功,加载并显示
		Image imagepng(L"cos.png");
		graphics.TranslateTransform(rect.Width, 0);
		graphics.DrawImage(&imagepng, rect);
	}
	else
	{
		AfxMessageBox(L"文件保存失败!");
	}
}
代码实现: