【发布时间】: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