加速 ImageView 中的缩放功能

Speed up zoom feature in ImageView

我目前正在处理由于多种原因无法调整大小或压缩的非常大的图像 (7-10mb)。

现在,我们的想法是在自定义 ImageView 中显示它们,使用户能够进行双击缩放、双指缩放等操作

我在工作中使用了这个库:https://github.com/MikeOrtiz/TouchImageView

我也尝试过其他库,但其他所有库仍然非常慢。有人可以给我一些 pointers/suggestion 让它更快(甚至编写我自己的 C++ 实现)吗?

我对所有这些 "Matrix"、"flig"、"scale" 有点迷茫,我不知道我应该触摸什么才能让它更快。如果您还知道其他更快的库(或如何使用自定义 Android 实现,它运行得非常快),那就太好了。

您可以尝试手动实施 "mipmaps" -- 同一图像的不同尺寸,然后只使用尺寸最合适的图像来显示....因此当缩小时,您将操纵一个相对较小的图像(但放大时仍会获得大图像的全部细节)。

尝试一个名为 PhotoView. When used together with picasso 的库,我能够实现 Onlick 功能,使用户能够单击较小的图像并让它在具有缩放功能的自定义视图上弹出完整图像。这真的易于实施

尝试使用名为 openCV 的库或在 matlab 中使用它,然后将代码移植到 c/c++ 以进行图像增强

解决它的一种方法是使用 WebView,它支持平移、缩放等。不过我认为图像质量可能是个问题。

android-local-image-in-webview

android-add-image-to-webview-from-a-drawable

等 您还可以动态生成和加载 html

您是否尝试过使用 Ion 库的 DeepZoom 功能?

https://github.com/koush/ion

https://www.youtube.com/watch?v=yIMltNEAKZY

如果你不想用opengl,或者上面的库不行,你也可以试试http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html class。也就是说,跟踪 "where" 用户(视口和缩放级别)并从主线程解码该区域,每次用户更改输入时将其推入 canvas。

在 TouchImageView.java class DoubleTapZoom 中为 ZOOM_TIME

设置一个较低或较高的值
private class DoubleTapZoom implements Runnable {
 ......
 private static final float ZOOM_TIME = 500 //(lower - faster)
 ......