2017-08-28 33 views
0

我有一個自定義視圖(WorldMapView)和地圖繪製(3209x1287,PNG,64位色,1.33M)和我正在如何使用PNG格式壓縮位圖?

了java.lang.RuntimeException:畫布:企圖拉攏過大(148679388bytes)位圖。

我試圖像這樣壓縮。

WorldMapView worldMapView = (WorldMapView) itemView.findViewById(R.id.map_of_world); 
    Bitmap bitmap = ((BitmapDrawable) ContextCompat.getDrawable(context, R.drawable.map)).getBitmap(); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
    Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 
    worldMapView.setImageBitmap(decoded); 

但如果你使用的是PNG格式的話,由於PNG是一種無損格式,它不會壓縮你的形象,所以任何人都可以請提出一個解決辦法?

非常感謝您。

+1

'但是如果你使用的是PNG格式,那麼它不會壓縮你的圖像,因爲PNG是一種無損格式。「你自己回答。 –

回答

2

我試圖壓縮這樣

你不能 「壓縮」 一個Bitmap到另一個Bitmap。一些文件格式(例如,PNG,JPEG,WebP)在磁盤上壓縮。 A Bitmap總是未壓縮。

,如果你使用的是PNG格式的話,由於PNG是一種無損格式

這無關你的問題就不會壓縮圖像。 PNG是一種磁盤格式。 Bitmap不是。無論使用何種圖像格式,從BitmapBitmap都不會「壓縮」位圖。

所以任何人都可以請建議一個解決方案?

將圖像的分辨率降低90%左右。

或者,使用處理大圖像的視圖,如this one

+0

感謝您的回覆。 –