2015-08-21 38 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) 
......