【问题标题】:Why is an image displayed with Graphics.drawImage() in Java not like I drew it为什么在 Java 中使用 Graphics.drawImage() 显示的图像不像我画的那样
【发布时间】:2020-06-25 18:52:23
【问题描述】:

我有存储 .png 图像 (320 x 240) 的 BufferedImage,我使用 Graphics.drawImage() 在 Сanvas 上绘制它。但如果仔细观察,例如,3 x 3 像素的十字实际上是 4 x 3 像素。看图里我的问题:enter image description here

GameContainer渲染方法:

public void render() {
    bs = window.canvas.getBufferStrategy();
    if (bs == null) {
        window.canvas.createBufferStrategy(3);
        return;
    }
    g = (Graphics2D) bs.getDrawGraphics();
    gm.render(g);
    g.dispose();
    bs.show();
}



GameManager 渲染方法:

public void render(Graphics2D g) {
    b.render(g);
}



后台渲染方法:

public void render(Graphics2D g) {
    g.drawImage(image, 0, 0 , null);
}

【问题讨论】:

  • 我认为代码在这里没用。我只是使用 Graphics.drawImage(image, x, y, 0);
  • 我在过去(很多年前 ;-))也遇到过类似的问题,可能与 RenderingHints 有关,看看这里也许对 stackoverflow.com/a/36316937/150623 和这里有帮助 docs.oracle.com/javase/tutorial/2d/advanced/quality.html
  • 谢谢汤米。我也在 RenderingHints 中想到了这个问题,但它对我没有帮助。
  • 我注意到一件事。我将窗口的分辨率更改为 (320 * 3) x (240 * 3) 并使用 Graphics.scale(3, 3) (缩放我绘制的所有图形)。现在我得到的图像看起来像我画的图像,但我不认为这是我的问题的决定。

标签: java graphics bufferedimage graphics2d java-2d


【解决方案1】:

您可能正在使用 drawImage() 的重载之一,它可以缩放图像以适应特定区域。你可以看看这里: https://docs.oracle.com/javase/tutorial/2d/images/drawimage.html 以下段落: 例如,drawImage() 方法的以下重载使您可以在指定图像的指定区域绘制当前可用的尽可能多的区域,并将其缩放以适合目标可绘制表面的指定区域:

布尔Graphics.drawImage(图像img, 诠释 dstx1,诠释 dsty1,诠释 dstx2,诠释 dsty2, 诠释 srcx1,诠释 srcy1,诠释 srcx2,诠释 srcy2, ImageObserver 观察者);

【讨论】:

  • 当然那是理想的,但我只是想提供一些帮助,也许提交问题的人面临截止日期的压力,或者谁知道是什么阻碍了他编写实际代码。无论如何,试图提供帮助。
  • Laurentiurad,感谢您尝试帮助我。我很感激。
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 2014-08-26
  • 2022-11-17
  • 1970-01-01
  • 2014-02-01
  • 2021-03-30
  • 2015-05-04
相关资源
最近更新 更多