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

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

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

GDI+实现图片的参数设置:

上代码:

void C油表View::OnGdiBmp2jpg()
{
	// TODO: 在此添加命令处理程序代码
	Graphics graphics(this->m_hWnd);
	this->RedrawWindow();
	CLSID encoderClsid;
	EncoderParameters encoderParameters;
	ULONG quality;
	Status stat;
	/////加载图片
	Image image(L"媳妇~.bmp");
	RectF rect(0, 0, image.GetWidth() / 2,image.GetHeight() / 2);
	///显示正常图片
	graphics.DrawImage(&image, rect);
	////获取JPEG格式的编码方式
	GetEncoderClsid(L"image/jpeg", &encoderClsid);
	////构造编码参数列表EncoderParameters
	////数组中只包含一个EncoderParameters对象
	encoderParameters.Count = 1;
	encoderParameters.Parameter[0].Guid = EncoderQuality;
	////参数类型为Long
	encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
	/////只设置一个参数
	encoderParameters.Parameter[0].NumberOfValues = 1;
	////设置JPEG图片质量为低
	quality = 0;
	encoderParameters.Parameter[0].Value = &quality;
	stat = image.Save(L"Jcos-1.jpg", &encoderClsid, &encoderParameters);
	if (stat == Ok)
	{
		Image image01(L"Jcos-1.jpg");
		////绘图平面右移
		graphics.TranslateTransform(rect.Width + 10, 0);
		graphics.DrawImage(&image01, rect);
	}
	else
	{
		AfxMessageBox(L"文件保存失败");
	}
	///设置保存JPEG图片质量为中等
	quality = 50;
	encoderParameters.Parameter[0].Value = &quality;
	stat = image.Save(L"Jcos-2.jpg", &encoderClsid, &encoderParameters);
	if (stat == Ok)
	{
		Image image02(L"Jcos-2.jpg");
		/////重置绘图平面冰下移
		graphics.ResetTransform();
		graphics.TranslateTransform(0, rect.Height + 10);
		graphics.DrawImage(&image02, rect);
	}
	else
	{
		AfxMessageBox(L"文件保存失败!");
	}
	quality = 100;
	encoderParameters.Parameter[0].Value = &quality;
	stat = image.Save(L"Jcos-3.jpg", &encoderClsid, &encoderParameters);
	if (stat == Ok)
	{
		Image image03(L"Jcos-3.jpg");
		//graphics.ResetTransform();
		graphics.TranslateTransform(rect.Width+10, 0);
		graphics.DrawImage(&image03, rect);
	}
	else
	{
		AfxMessageBox(L"文件保存失败!");
	}
}
代码实现:

具体的函数应用及解析请看图片的解码与编码2》《图片的编码与解码5》系列