2016-02-24 67 views
0

我是Android新手,但已完成一些iOS工作。我得到一個錯誤,當我從相機圖像對三星S4(4.4.4)加載一個位圖:Android - 將大型位圖加載到TouchImageView

bmp = BitmapFactory.decodeFile(photoFilePath, options); 

imgView.setImageBitmap(bmp); 

這裏imgView是TouchImageView。 (我嘗試使用ImageViewZoom,但不能把它導入到AndroidStudio。)

我得到這個錯誤:

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4128x3096, max=4096x4096) 

從iOS版即將我很驚訝,安卓不能加載從手機的圖像擁有相機!我希望有一種不太難的方式。這一定是可能的,因爲畫廊似乎能夠做到這一點。 我在網上看到的例子(建議您對圖像進行二次抽樣)似乎沒有考慮到這一點。使用平移和縮放(應該將其內置到ImageView中),圖像視圖只是一個更大的圖像的較小窗口。您不必將位圖適合視圖的像素大小。我擔心這個愚蠢的建議(二次抽樣)反映了Android的嚴重缺陷。

回答

0

我相信錯誤消息與OpenGL的不是Android系統。 GPU可能會對最大紋理分辨率施加限制。你的情況是4096x4096像素。建議開發人員將縮小版本加載到UI中,因爲在有限的屏幕顯示中查看大圖像是不合理的,例如手機。有關詳情,請參閱here

如果您需要在實際尺寸查看大圖,然後你可以繪製圖像的可見部分。

+0

iPhone是手機,沒有這樣的限制。 –

+0

Android自Honeycomb使用GPU硬件加速來顯示屏幕上顯示的所有內容。所以'查看'基本上只是附着了紋理​​的三維多邊形。這是通過Android完成的,對於iOS中的開發者來說,AFAIK並非如此。 –

0

我認爲答案是「沒有簡單的方法」。我懷疑這一點,但必須檢查確認。我確實發現在清單中設置android:hardwareAccelerated = "false"允許加載大型位圖,但是應用程序很快就會崩潰。有趣的是,缺乏硬件加速在性能上似乎沒有太大的差別。

0

我的圖書館設計來解決這個問題,它最初的子樣本圖像,然後加載更高分辨率的瓦片可以在放大。如果你仔細觀察,你可以看到,大部分的Android應用程序庫做同樣的事情。

https://github.com/davemorrissey/subsampling-scale-image-view

+0

這看起來像一個很好的圖書館。不幸的是,除了顯示我的應用程序需要訪問整個位圖以進行圖像處理之外。 –