Héc*_*orn 5 java image loading large-files rescale
我有一个非常大的高分辨率地图,我想在应用程序中使用它(图像大小约为 80 mb)。
我想知道以下内容:
JProgressBar
向用户显示。这应该反映已加载的字节数或类似的内容。是否有任何图像加载方法可以提供此功能(如ImageIO.read()
)?BufferedImage
对于这么大的文件,重新缩放标准方式需要很长时间。有没有什么有效的方法可以做到这一点?谢谢您的意见!
亲切的问候,
埃克托·范登布恩
ps 图像将绘制在 JPanel 的画布上。
嗨,安德鲁,非常感谢您的帮助;一切都很完美,加载速度很快。如果没有您的专业知识和解释,我会一直致力于此,因此您赢得了公平公正的赏金。
我所做的是以下内容;使用 imagemagick 我创建了多个不同分辨率的图像,并且在执行开始时我只加载最小的 res。图片。其余的加载在单独的线程中,因此执行不会停止。使用您提供给我的信息,我然后在放大或缩小时使用适当的图像。我对使用瓷砖有点怀疑,因为我需要在地图上绘制自己的图像,而我在您告诉我使用的外部罐子中找不到油漆功能,所以我最终使用了一些简单的东西;当缩放或平移时,重新缩放模式设置为快速,当您不缩放或平移时,重新缩放设置为平滑以获得像素完美的图像(就像您建议的那样),但事实证明这足够快,我不”
所以再次感谢,一切正常:)
您应该(同时)采取两种方法:
(提供适当大小和平铺图像的缓存使得 GoogleEarth 和无数其他地图应用程序能够如此快速地渲染,同时以令人难以置信的高分辨率放大地图)
获得图块后,您可以使用 Java 中的几个引擎之一:
可能还有其他人。
您可以在此框架内实现任意缩放(适用于捏合缩放或类似操作)。在您允许的缩放限制内,您的算法将类似于:
有几点需要注意:
使用这些技术时,图像加载速度应该会快得多,因此进度条并不那么重要。如果是,那么您需要在ImageReader上注册一个 IIOReadProgressListener :
来自 JavaDoc:
ImageReader 实现使用的接口,用于通知调用者其图像和缩略图读取方法的进度。
该接口接收解码进度的一般指示(通过 imageProgress 和thumbnailProgress 方法),以及指示整个图像何时更新的事件(通过 imageStarted、imageComplete、thumbnailStarted 和thumbnailComplete 方法)。希望在发生像素更新时(例如,在渐进式解码期间)获知像素更新的应用程序应提供 IIOReadUpdateListener。
归档时间: |
|
查看次数: |
2261 次 |
最近记录: |