当前位置:  开发笔记 > 编程语言 > 正文

Java2D性能问题

如何解决《Java2D性能问题》经验,为你挑选了1个好方法。

我在使用Java2D时遇到了奇怪的现象.我知道sun.java2d.opengl VM参数可以为2D启用3D加速,但即使使用它也有一些奇怪的问题.

以下是我运行的测试结果:

在JComponent
Image 1 = .bmp格式上绘制具有32x32像素图块的25x18地图,图像2 = A .png格式

没有-Dsun.java2d.opengl = true

120 FPS使用.BMP图像1
13 FPS使用.PNG图像2

使用-Dsun.java2d.opengl = true

12 FPS使用.BN图像1
700 FPS使用.PNG图像2

如果没有加速,我假设每次使用drawImage()我都会在软件中进行某种转换,并且在.PNG的情况下大大降低了FPS.但是,为什么加速时,结果会切换(而PNG实际上表现得更快)?!疯狂!

.BMP图像1被转换为TYPE_INT_RGB的图像类型..PNG图像2被转换为TYPE_CUSTOM的图像类型.为了在有和没有opengl加速的情况下获得一致的速度,我必须创建一个图像类型为TYPE_INT_ARGB的新BufferedImage,并将Image 1或Image 2绘制到这个新图像.

以下是运行的结果:

没有-Dsun.java2d.opengl = true

120 FPS使用.BMP图像1
120 FPS使用.PNG图像2

使用-Dsun.java2d.opengl = true

700 FPS使用.BN图像1
700 FPS使用.PNG图像2

我真正的问题是,我可以假设TYPE_INT_ARGB将是所有系统和平台的本机图像类型吗?我假设这个值可能不同.有没有办法让我获得原生值,以便我总能创建新的BufferedImages以获得最佳性能?

提前致谢...



1> Consty..:

我想我通过研究太多谷歌搜索并将点点滴滴放在一起找到了解决方案.

在这里,评论和所有:

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

    /*
     * if image is already compatible and optimized for current system 
     * settings, simply return it
     */
    if (image.getColorModel().equals(gfxConfig.getColorModel()))
        return image;

    // image is not optimized, so create a new image that is
    BufferedImage newImage = gfxConfig.createCompatibleImage(
            image.getWidth(), image.getHeight(), image.getTransparency());

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

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

    // return the new optimized image
    return newImage; 
}

在我之前的文章中,GraphicsConfiguration保存了在系统上创建优化图像所需的信息.它似乎工作得很好,但我会认为Java会自动为你做这件事.显然你对Java不太满意.:)我想我最终回答了自己的问题.哦,好吧,希望它能帮助你们中的一些人,我曾经尝试过将Java用于2D游戏.


这绝对棒极了.它使我的代码运行得更快.非常感谢你.
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有