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

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

更新时间:2015-12-15 22:09:08浏览次数:1+次

JPEG格式的图像是一种有损图像质量的压缩图像文件,也就是说,在将文件保存为JPEG文件后,原来的一些彩色信息再压缩的过程中丢失。如果是对JPEG文件进行修改后再次保存为JPEG文件,图片的质量则会进一步下降。因为JPEG文件是一种在再互联网上广为流传的格式,处于电脑爱好者对JPEG文件的喜好,GDI+对JPEG文件也提供了额外的关注,这种关注主要体现在对图片质量方面的保证。
按照GDI+的开发文档,GDI+保证在对JPEG图片进行下列变换时,JPEG图片的质量保持不变,这些变换是:
图片旋转90°
图片旋转270°
图片旋转180°
水平翻转
垂直翻转
程序开发人员可使用Image类的成员函数Save保存JPEG文件前,进行上述的任何一种变换,JPEG的质量不会受到丝毫的影响。另外,如果满足下面的两个条件,JPEG图片也不会因为变换而降低质量
使用JPEG图片构造Image对象
JPEG图片的高度和宽度均为16的整数倍
当JPEG文件的宽度和高度均不是16的整数倍的时候,在进行图片的变换时,GDI+将会尽量的保护JPEG的
信息不至于丢失
如果要将变换信息保存在JPEG文件中,关键是在编码参数中进行变换的说明,编码参数的定制是通过向
EncoderParameters对象传送参数信息来完成的,所有的参数信息都将直接影响Image类的Save成员函数
对JPEG的保存信息
EncoderParameters的主要成员是EncoderParameter对象,在对EncoderParameter初始化的过程中,可以

直接申明进行图片的简单变换,申明的方法

EncoderValueTransformRotate90;
EncoderValueTransformRotate180;
EncoderValueTransformRotate270;
EncoderValueTransformRotateFlipHorizontal;
EncoderValueTransformRotateFlipVertical;
代码实现图片的转换及旋转:
void C油表View::OnGdiTransformingjpeg()
{
	// TODO: 在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	this->RedrawWindow();
	CLSID encoderClsid;
	EncoderParameters encoderParameters;
	ULONG transformation;
	Status stat;
	/////加载图片
	Image image(L"媳妇~.bmp");
	RectF rect(0, 0, image.GetWidth(), image.GetHeight());
	///显示正常图片
	graphics.DrawImage(&image, rect);
	////获取JPEG格式的编码方式
	GetEncoderClsid(L"image/jpeg", &encoderClsid);
	////构造编码参数列表EncoderParameters
	////数组中只包含一个EncoderParameters对象
	encoderParameters.Count = 1;
	encoderParameters.Parameter[0].Guid = EncoderTransformation;
	////参数类型为Long
	encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
	/////只设置一个参数
	encoderParameters.Parameter[0].NumberOfValues = 1;
	transformation = EncoderValueTransformRotate90;
	encoderParameters.Parameter[0].Value = &transformation;
	stat = image.Save(L"cos2.jpg", &encoderClsid, &encoderParameters);
	if (stat == Ok)
	{
		Image image01(L"cos2.jpg");
		graphics.TranslateTransform(rect.Width + 10, 0);
		graphics.DrawImage(&image01, rect);
	}
	else
	{
		AfxMessageBox(L"文件保存失败!");
	}
}