2017-08-28 5 views
0

Ich habe eine benutzerdefinierte Ansicht (WorldMapView) und eine Karte ziehbar (3209x1287, PNG, 64-Bit-Farbe, 1,33 M), und ich binWie komprimiere ich Bitmap im PNG-Format?

bekommen

java.lang.RuntimeException: Leinwand: Der Versuch, zu groß zu ziehen (148679388bytes) Bitmap.

Ich versuchte, so zu komprimieren.

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); 

Aber wenn Sie mit PNG-Format, dann wird es nicht Ihr Bild komprimieren, weil PNG ein verlustfreies Format ist, so kann jemand bitte eine Lösung vorschlagen?

Vielen Dank im Voraus.

+1

'Wenn Sie jedoch das PNG-Format verwenden, wird das Bild nicht komprimiert, da PNG ein verlustfreies Format ist. Sie haben sich selbst geantwortet. –

Antwort

2

habe ich versucht, wie diese

Sie nicht "komprimieren" kann zu komprimieren ein Bitmap zum anderen Bitmap. Bilder sind in einigen Dateiformaten (z. B. PNG, JPEG, WebP) auf der Platte komprimiert. A Bitmap ist immer unkomprimiert.

, wenn Sie PNG-Format verwenden, dann wird es nicht Ihr Bild komprimieren, weil PNG ein verlustfreies Format ist

Dies, um Ihr Problem nichts zu tun hat. PNG ist ein On-Disk-Format. Bitmap ist nicht. Wenn Sie von Bitmap zu Bitmap gehen, wird die Bitmap nicht komprimiert, unabhängig davon, welches Bildformat Sie verwenden.

also kann jemand bitte eine Lösung vorschlagen?

Reduzieren Sie die Auflösung des Bildes um 90% oder so.

Oder verwenden Sie eine Ansicht, die große Bilder verarbeitet, z. B. this one.

+0

Vielen Dank für Ihre Antwort. –

Verwandte Themen