如何使用 g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2) 缩放图像?

How do I scale an image with g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2)?

我需要为我的游戏渲染大量图像,并且需要将它们缩放到任何宽高比以适合屏幕,我找不到任何解决方案。

它已经渲染了图像,只是宽高比不正确。

渲染代码:

class _canvas extends JComponent {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        for (renderable_object part : objs) {  
            if (part.type == 5) {
                g.drawImage(part.get_Image(), part.i, part.j, 23,23);
            }
        }
    }
}

可渲染对象:

class renderable_object {
    int i = 0;
    int j = 0;
    int k = 0;
    int l = 0;

    int type = 0;

    String file = "";

    Image get_Image() {
        return(Toolkit.getDefaultToolkit().getImage(file));
    }
}

您显示的代码根本没有缩放图像。您至少可以通过两种方式从这里开始。

您已经找到了正确的使用方法(查看问题的标题)。使用该方法,您可以定义源坐标和目标坐标,并相应地进行渲染。看来您需要确保您要求的坐标具有正确的纵横比。

另一种可能性是将 Graphics 转换为 Graphics2D,然后使用 https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/Graphics2D.html#drawImage(java.awt.Image,java.awt.geom.AffineTransform,java.awt.image.ImageObserver) 实际渲染图像。 图像的缩放和精确定位现在可以通过 AffineTransform 完成,你可以通过

获得
getScaleInstance​(double sx, double sy).concatenate(getTranslateInstance​(double tx, double ty))

所以设置起来可能更容易。这样也很容易应用旋转、剪切或其他东西。