2015-08-21 37 views
3

我目前正在处理非常大的图像(7-10mb),由于多种原因无法调整大小或压缩。现在加快ImageView中的缩放功能

,这个想法是向他们展示一个自定义的ImageView,使用户做双击缩放,捏缩放等

我用这个库作业:https://github.com/MikeOrtiz/TouchImageView

我也尝试了其他库,但其他库仍然非常慢。有人可以给我一些指示/建议,使其更快(甚至写我自己的C++实现)?

我对所有这些“Matrix”,“flig”,“scale”的东西都有点失落,我不知道应该如何让它更快。如果你还知道其他更快的库(或者如何使用自定义的Android实现,那真的很快),那就太好了。

+0

有多大,他们逐像素?你可以将它们上传到GLES纹理吗? – fadden

+0

对不起,什么是GLES纹理?顺便说一句,他们是3680x3288,6.4MB,不能调整大小或缩放。 – Filnik

+0

在大多数设备上,OpenGL-ES纹理可以达到4096x4096,但一些低端设备可能会限制为2048x2048。 GLES可以处理缩放(和旋转,以及任何你可能想要做的事情)。你的图片可能是6。磁盘上为4MB,但内存为46MB(假设每像素为32位),因为它们在显示前必须解压缩;操纵软件中的大量数据不会很快,所以最好让GPU去做。 – fadden

回答

3

您是否尝试过使用离子库的DeepZoom功能的HTML?

https://github.com/koush/ion

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

如果你不想使用OpenGL或上述库不工作,你也可以尝试用http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html类播放。也就是说,跟踪用户所在的位置(视口&缩放级别),并将该区域从主线程解码出来,并在每次用户更改输入时将其推送到画布中。

+0

这项工作像魅力,真的很感谢你! :)正是我所需要的 – Filnik

2

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

+0

但它仍然是缓慢的全缩放图像,我说得对吗?它在图像上的移动速度也很慢,不仅是变焦:( – Filnik

+0

True。我猜你可以将图像分成更小的图块,只显示那些图块(用数学来排列它们)... – Buddy

2

尝试一个名为PhotoView的库。当与picasso一起使用时,我能够实现Onlick功能,使用户能够点击一个较小的图像,并让它在自定义视图上弹出完整图像,并具有缩放功能。它的实现非常简单。

+0

感谢但它太慢了我一直得到: “跳过82帧!应用程序可能在其主线程上做了太多工作。” 任何其他想法?:( – Filnik

5

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

+0

它不仅仅是增强功能,因为它不是“一次性” “zoom ..它是整个缩放功能连接到手势等 – Filnik

2

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

android-local-image-in-webview

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

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

+0

实际上它似乎是一个好主意,虽然我不能理解为什么在浏览器它只是超快速,在web视图上它仍然滞后一点(好多了比其他的解决方案,虽然)。任何想法? – Filnik

+0

对不起,不,不能说为什么它更慢。 – reden

0

在TouchImageView.java类DoubleTapZoom设定较低或较高值ZOOM_TIME

private class DoubleTapZoom implements Runnable { 
...... 
private static final float ZOOM_TIME = 500 //(lower - faster) 
......