【问题标题】:setTransform to rotate Images produces unexpected resultssetTransform 旋转图像会产生意想不到的结果
【发布时间】:2021-08-13 08:25:26
【问题描述】:

我到处寻找与我有同样问题的人,但似乎我是唯一遇到此错误的人。

所以我在 Java 中使用 Swing。我有一个类Player 可以绘制玩家的图像。但是,每次我尝试使用setTransform 旋转图像时,第二个播放器实例都会缩小两倍。

这是我绘制方法的代码:

AffineTransform transform = new AffineTransform();
transform.rotate(this.getOrientationRadians(), getX()+getWidth()/2,getY()+getHeight()/2);

g.setTransform(transform);
g.drawImage(image, (int)(getX()), (int)(getY()), null);

g.setTransform(new AffineTransform());

【问题讨论】:

  • 您应该创建一个小示例,该代码甚至没有显示您提到的第二个“玩家”。同样,将转换重置为旧值也不起作用。
  • 第二个播放器的代码与播放器实例的代码相同。 “同样将转换重置为旧值也不起作用”,我不知道该怎么做......
  • 仿射变换 oldTransform = g.getTransform() .... g.setTransform(oldTransform)。必须查看其余代码才能理解问题
  • 1) 为了尽快获得更好的帮助,edit 添加minimal reproducible exampleShort, Self Contained, Correct Example。 2) 例如,获取图像的一种方法是热链接到this Q&A 中看到的图像。例如。 this answer 中的代码热链接到嵌入在this question 中的图像。

标签: java image swing graphics2d affinetransform


【解决方案1】:

通过覆盖Graphics 对象的转换,您还覆盖了系统规模施加的缩放(我想设置为 200%)。

要么限制使用Graphics2D::rotate,要么将转换传递给drawImage 调用。

AffineTransform transform = new AffineTransform();
transform.translate(getX(), getY());
transform.rotate(getOrientationRadians());

g.setTransform(transform);
g.drawImage(image, transform, null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多