java 设置变幻后大小变小的问题
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);//正常情况下加上这条直线应该正好画出一个矩形
*/
}
//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);
}
出现异常,与理想中的位置不符
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);
}
将坐标扩大到原来的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:
上一篇: malloc与new的区别
下一篇: 推荐五大中医按摩法 助您延年益寿
推荐阅读