【发布时间】:2009-03-18 12:31:09
【问题描述】:
我遇到了一个奇怪的问题,基本上是在 Java 中 Graphics.drawImage() 在某些计算机上非常慢,而在其他计算机上则更快。这也与计算机的能力无关,一些较弱的计算机运行良好,而一些较强的计算机似乎在 drawImage 调用中窒息。
它可能与宽度和高度有关,也可能无关,我定义了一个非常非常大的宽度和高度(例如 5000 x 2500)。我认为这不是问题,除非我说它在某些计算机上以实时速度运行,而在其他计算机上运行较慢,并且似乎与计算机的相对功率无关。
两台计算机的 Java 版本相同,都使用 Vista。一个有 1.83ghz Core 2 Duo,1gb RAM 和板载图形(运行一切正常),另一个有 2.53ghz core 2 duo,9600GS(最新的 nVidia 驱动程序)和 4gb 内存,它在 drawImage 调用上确实突兀。
有什么想法吗?
编辑:好的,这真的很奇怪,我正在将图像绘制到 Swing 中的窗口,现在当我调整窗口大小并使其非常小时,图像也会缩小并且变得很小。突然间一切都运行得很顺利,当我将它放大到它仍然运行顺利之前的大小时!
它也有多个显示器问题,如果我使用调整大小技巧使其在一个显示器上运行得更快,然后当超过一半的窗口位于新显示器中时,它会再次开始运行时将其滚动到另一台显示器。我必须再次将窗口大小调整为小然后恢复到原来的大小才能恢复速度。
如果我在一台显示器上进行调整大小技巧,将它移到另一台显示器上,它当然会突突,但如果我将它放回我进行调整大小技巧的原始显示器,它会 100% 工作
如果我打开了两个摆动窗口(显示相同的图像),它们都会运行缓慢,但如果我在一个窗口上执行调整大小技巧,它们都会开始平稳运行(但情况并非总是如此)。
*当我说调整窗口大小时,我的意思是让它尽可能小到实际无法看到图像的程度。
这可能是 Java 中的错误吗?
【问题讨论】:
-
是什么镜像,电脑上的JDK是什么版本的?
-
我想我看到了同样的问题。这是 XP 上的 JDK 8(是的,我知道)和一个 Hi-Color 显示器。渲染一个包含全屏截图的 BufferedImage 需要几秒钟的时间 - 但只需要第二次 (!) 绘制组件的时间。对 drawImage 的后续调用又是即时的。也许一些转换发生在内部?总而言之相当令人困惑,而且简单的颜色转换需要那么长时间(如果这是原因的话)是不可接受的。