欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 设置变幻后大小变小的问题

程序员文章站 2022-05-31 09:01:44
...

java设置变幻(setTransform)后绘制的图形图像大小变小

最近在使用java做GUI的时候发现一个问题,当Grgaphis2D对象调用setTransform()后,绘制的图形图像会出现大小异常改变的情况,代码和运行结果如下:

//part 1
public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;
		int i = 160;
		g2.drawLine (100, 100, 300, 100);//line1
		//line1和line2用于精确确定位置
		g2.drawLine (300, 100, 300, 150);//line2
		g2.drawLine (100, 100, 100, 150);//line3
		//transform.scale (1, 1);
		/*g2.setTransform (transform);
		g2.drawLine (100, 150, 300, 150);//正常情况下加上这条直线应该正好画出一个矩形
		*/
	}

java 设置变幻后大小变小的问题

//part2
	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;
		int i = 160;
		g2.drawLine (100, 100, 300, 100);//line1
		g2.drawLine (300, 100, 300, 150);//line2
		g2.drawLine (100, 100, 100, 150);//line3
		AffineTransform transform = new AffineTransform ();
		transform.scale (1, 1);//加不加上这句的结果都一样,这里缩放一倍用于对比
		g2.setTransform (transform);
		g2.drawLine (100, 150, 300, 150);
	}

java 设置变幻后大小变小的问题
出现异常,与理想中的位置不符

public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D) g;
		int i = 160;
		g2.drawLine (100, 100, 300, 100);//line1
		g2.drawLine (300, 100, 300, 150);//line2
		g2.drawLine (100, 100, 100, 150);//line3
		AffineTransform transform = new AffineTransform ();
		transform.scale (5/4.0, 5/4.0);//变幻后大小变成原来的4/5
		g2.setTransform (transform);
		g2.drawLine (100, 150, 300, 150);
	}

java 设置变幻后大小变小的问题
将坐标扩大到原来的5/4倍后结果恢复正常。
5/4这个数字是我经过多次试验后得到的结果,也就是说使用了AffineTransform 类进行变换后,会自动进行一个与预期不符的缩放,其中的原因目前还不清楚,并且我发现只要是Grgaphis2D对象调用setTransform()后,再用该Grgaphis2D对象绘画,无论是图形还是图像等等都会出现上述异常,解决办法就是手动的缩放5/4倍(注意代码里应该写成5/4.0等等,防止整除成了1)。

出现这种异常可能与开发和运行环境有关,这里备注一下我的开发和运行环境(IDEA 是汉化过的):
IntelliJ IDEA 2019.2.4 (Community Edition)
构建 #IC-192.7142.36, 建于 October 29, 2019
JRE: 11.0.4+10-b304.77 amd64
JVM: OpenJDK 64-Bit Server VM 由 JetBrains s.r.o  
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 974M
Cores: 6
Registry:
Non-Bundled Plugins:

相关标签: java 编程语言