gpt4 book ai didi

java - Java 中的 Graphics.drawImage() 在某些计算机上非常慢,但在其他计算机上却快得多

转载 作者:太空狗 更新时间:2023-10-29 22:50:20 26 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,主要是在 Java 中 Graphics.drawImage() 在某些计算机上非常慢,而在其他计算机上则更快。这也与计算机的能力无关,一些较弱的计算机运行良好,而一些较强的计算机似乎在调用 drawImage 时出现阻塞。

它可能与宽度和高度有关,也可能无关,我定义了非常非常大的宽度和高度(大约 5000 x 2500)。我认为这不是问题,除非就像我说的那样它在某些计算机上以实时速度运行而在其他计算机上运行速度较慢并且似乎与计算机的相对功率无关。

两台计算机的 Java 版本相同,都使用 Vista。一个有一个 1.83ghz Core 2 Duo 和 1gb RAM 和板载显卡(运行一切正常),另一个有一个 2.53 ghz core 2 duo 和 9600GS(最新的 nVidia 驱动程序)和 4gb RAM 并且它在 drawImage 调用时确实发出声音。

有什么想法吗?

编辑:好的,这真的很奇怪,我在 Swing 中将图像绘制到一个窗口,现在当我调整窗口大小并使其非常小时,图像也会按比例缩小并变小。突然间,一切都运行顺利,当我将其缩放回原来的大小时,它仍然运行顺利!

它还有多个显示器问题,如果我使用调整大小技巧使其在一个显示器上运行得更快,然后当超过一半的窗口位于新显示器中时将其滚动到另一台显示器,它会再次开始卡顿。我必须再次将窗口的大小调整为较小的大小,然后恢复为原始大小以恢复速度。

如果我在一台显示器上执行调整大小技巧,将它移到另一台显示器上,它当然会发出声音,但如果我将它返回到我执行调整大小技巧的原始显示器上,它会 100% 起作用

如果我打开两个旋转窗口(显示相同的图像),它们都运行缓慢,但如果我在一个窗口上执行调整大小技巧,它们都会开始平稳运行(但情况并非总是如此)。

*当我说调整窗口大小时,我的意思是让它尽可能小到实际上无法看到图像的程度。

这可能是 Java 中的错误吗?

最佳答案

将图像写入屏幕的性能在很大程度上受图像存储格式的影响。如果格式与屏幕内存所需的格式相同,则速度会非常快;如果不是,则必须进行转换,有时是逐像素转换,这非常慢。

如果您可以控制图像的存储方式,则应该以屏幕正在查找的格式存储它。这是一些示例代码:

    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = env.getDefaultScreenDevice();
GraphicsConfiguration config = device.getDefaultConfiguration();
BufferedImage buffy = config.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
Graphics g = buffy.getGraphics();

如果您要多次绘制图像,则可能值得将其转换为兼容的格式,即使它采用其他格式也是如此。

如果您在绘制图像时对其进行转换,则绘制图像也会变慢,您描述中的“调整大小”部分让我觉得您可能是这样。同样,调整一次大小(在调整窗口大小时)并缓存调整大小和兼容的图像,以便可以快速重绘。

关于java - Java 中的 Graphics.drawImage() 在某些计算机上非常慢,但在其他计算机上却快得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/658059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com