【问题标题】:Java 2D, Translation with the same amount on X and Y axis leads to different resultsJava 2D,X 轴和 Y 轴上相同的平移量会导致不同的结果
【发布时间】:2015-01-27 09:26:24
【问题描述】:

我只是在为一个周末项目玩 Java 2D。我试图完成的只是在距离原点 50,50 的位置加载和绘制图像。现在,当我尝试这样做时,使用

g2d.drawImage(imageLeft, 50, 50, 200, 200, null);

然后我得到以下信息:

坦率地说,这让我有点困惑。为什么翻译的 x 部分与 y 部分的缩放比例不同?这里发生了什么?一定是一个明显的初学者错误,但我一生都无法弄清楚这种行为的原因;-)

我用来绘制图像的完整代码是:

final IsogenWindow window = new IsogenWindow();
final BufferedImage imageLeft = loadImage(new File(getClass().getResource("/texture/tile1.png").toURI()));
final Graphics2D g2d = Graphics2D)window.getGraphics();

window.setSize(1000, 1000);
window.setVisible(true);

g2d.drawImage(imageLeft, 50, 50, 200, 200, null);

编辑 1: 为了尝试 DontRelaX 的建议,我更改了代码,以便将面板添加到 JFrame 并使用其 Graphic2D 对象进行绘图:

getContentPane().setLayout(null);
this.renderPanel = new JPanel();
getContentPane().add(renderPanel);
final Graphics2D g2d = (Graphics2D)renderPanel.getGraphics();
...
g2d.drawImage(imageLeft, 50, 50, 200, 200, null);

很遗憾,结果还是一样。但我认为 DontRelaX 是在正确的轨道上。还有什么建议吗?

编辑 2:基本上 DontRelaX 的回答是正确的。我确实使用的不是 renderPanel 的 Graphics2D,而是 JFrame 的 Graphics2D 对象。

干杯, 纳米庸医

【问题讨论】:

  • 基于@DontRelaX' 答案的替代方法是测量偏移量。
  • 1) final Graphics2D g2d = Graphics2D)window.getGraphics(); 正在制作中的错误。图形对象是瞬态的,不应被缓存。 2) g2d.drawImage(imageLeft, 50, 50, 200, 200, null); 应该是 g2d.drawImage(imageLeft, 50, 50, 200, 200, this); 3) getContentPane().setLayout(null); 充其量是不必要的,最坏的情况是导致错误的原因。 ..

标签: java swing awt graphics2d java-2d


【解决方案1】:

像素从窗口的左上角开始计算,而不是灰色的地方。将面板添加到您的窗口并在其上绘图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 2019-08-14
    • 2021-05-30
    • 2016-05-16
    • 2022-01-24
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多