举报

关于缩放因子图像失真。

0

主要就是关于图像失真方面的问题。

我发现缩放因子在缩放图像的时候,会出现中度的失真。

原图为1920×1080。

缩放后为753×423。

结果图像出现中度的失真。

	//DCX和DCY都是int型,为全局变量
	DCX = GetPrivateProfileInt("视频设置", "窗口宽度", 760, "./Setting.ini");
	DCY = GetPrivateProfileInt("视频设置", "窗口高度", 480, "./Setting.ini");
	//计算全屏数据
	if (GetPrivateProfileInt("视频设置", "全屏运行", 0, "./Setting.ini"))
	{
		DCX = GetSystemMetrics(SM_CXSCREEN);
		DCY = GetSystemMetrics(SM_CYSCREEN);
	}
	if (GetPrivateProfileInt("视频设置", "保留控制台", 1, "./Setting.ini") == 1)
	{
		initgraph(DCX, DCY, SHOWCONSOLE | NOCLOSE);   // 创建绘图窗口
		printf("控制台已保留\n");
	}
	if (GetPrivateProfileInt("视频设置", "保留控制台", 1, "./Setting.ini") == 0)
	{
		initgraph(DCX, DCY, NOCLOSE);   // 创建绘图窗口
	}

	printf("计算窗口显示缩放\n");

	{
		float s;
		int x = DCX;
		int y = DCY;
		DCX = DCX / 16;
		DCY = DCY / 9;
		if (DCX > DCY)
		{
			DCX = DCY * 16;
			DCY = DCY * 9;
		}
		if (DCX < DCY)
		{
			DCY = DCX * 9;
			DCX = DCX * 16;
		}
		if (DCX == DCY)
		{
			DCX = x;
			DCY = y;
		}
		x = x - DCX;
		y = y - DCY;
		x = x / 2;
		y = y / 2;
		s = (float)DCX / 1920;
		setaspectratio(s, s);
		setorigin(x, y);
	}

有什么办法解决这种失真吗?

ava
灵音

2019-12-31

举报
-1

目前,setaspectratio() 函数只是实现了 windows api 里面的缩放功能,都是非常基础的功能,应该是基于最临近像素计算的,注重的是效率,效果上较差。

如果想实现高质量的缩放,需要自己写算法。根据不同的需求,有不同的算法。比如 codebus 有一个坦克的代码,就是自己实现的缩放。

ava
慢羊羊

2019-12-31

技术讨论社区