java2D中如何使用compatibleImage来更快的绘制图片?

How to use compatibleImage to make drawing images faster in java2D?

我正在用 Java2D 编写游戏,它在我的计算机和我测试过的另一台计算机上运行流畅。然而在另一台具有良好规格和相同 java 设置的计算机上,它非常慢。我很确定我将它缩小到 g.drawImage() 命令。在做了一些研究之后,我发现有人做了一个方法来编译一些他发现可以提高速度的东西,方法是:

public BufferedImage toCompatibleImage(BufferedImage image) {
    // obtain the current system graphical settings
    GraphicsConfiguration gfx_config = GraphicsEnvironment
            .getLocalGraphicsEnvironment().getDefaultScreenDevice()
            .getDefaultConfiguration();



     //if image is already compatible and optimized for current system
     //settings, simply return it

    if (image.getColorModel().equals(gfx_config.getColorModel())) {

        return image;
    }

    // image is not optimized, so create a new image that is
    BufferedImage new_image = gfx_config.createCompatibleImage(
            image.getWidth(), image.getHeight(), Transparency.TRANSLUCENT);

    // get the graphics context of the new image to draw the old image on
    Graphics2D g2d = (Graphics2D) new_image.getGraphics();

    // actually draw the image and dispose of context no longer needed
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();

    // return the new optimized image
    // System.out.println(image.getColorModel());
    return new_image;
}

我很困惑你是如何使用这个方法的。我已经搞定了: 1) 仅在使用 Image.IO.

从 png 创建图像时调用它
BufferedImage img = toCompatibleImage(theLoadedImage);

然后在 paintComponent(Graphics g) 方法中简单调用

 Graphics2D g2 = (Graphics2D) g;
 g.drawImage(img, x, y, null); 

2) 像这样在每次重绘中调用它:

 Graphics2D g2 = (Graphics2D) g;
 g.drawImage(toCompatibleImage(theLoadedImage), x, y, null);

除了 FPS 的名义变化外,这两种方法似乎都没有做任何事情,第一种方法稍快一些。我不知道我是否在使用这个权利,所以帮助和基本解释真的很有帮助。

你应该用第一种方法,转换一次就够了。

兼容图像以与您的视频卡相同的格式在内部存储像素,因此不必在每次绘制时都进行转换。