Gibt es eine Bibliothek oder eine effiziente Möglichkeit, mit Bitmaps umzugehen.Bitmap Speicherleck große Bilder
Ich muss 1-10 Bilder an den Server senden. Bilder sind von 3-15 Megabyte. Wir senden Zeichenfolge im Base64-Format. Aber dieser Prozess benötigt zu viel Speicher und Anwendungen explodieren. Ich habe versucht, Anwendung zu optimieren und Speicher neu zu erstellen, aber in den meisten Fällen bekam ich Speicherausnahme, auch ich benutze großen Haufen.
protected Void doInBackground(Void... voids) {
for (int i = 0; i < mUriList.size(); i++) {
Log.e("encodeImage bitmap", Integer.toString(i) + " " + mUriList.get(i));
mBitmap = getBitmapFromUri(mUriList.get(i));
String imageNamePath = mImageNameList.get(i);
// FIXME: 5/23/16 OOM kod 10 slika
ByteArrayOutputStream stream = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] array = stream.toByteArray();
encoded_string = Base64.encodeToString(array, Base64.DEFAULT);
array = null;
//encoded_image_list.add(encoded_string);
makeRequest(encoded_string, imageNamePath, i);
mBitmap.recycle();
mBitmap = null;
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
stream = null;
encoded_string = null;
System.gc();
}
return null;
}....
Get Bild von Bitmap
public Bitmap getBitmapFromUri(Uri uri) {
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
ps: ich kann die Bildqualität reduzieren!
Grundsätzlich möchten Sie Base64 für den späteren Versand verwenden? –
Ich konvertiere es in Base64 und sende mit Volley. Es funktioniert gut, aber manchmal habe ich Speicher Leck Ausnahme App dauert von 150 bis 650 RAM Konvertierungsprozess. Ich sende Bild in makeRequest Funktion. Ich konvertiere Bild 1 um 1 und sende sie 1 in 1 in async Aufgabe ... – Adnan
können Sie die Bildgröße vor base64 reduzieren? –