2017-02-08 3 views
-1
public static void writeBitmapWithCompress(final String localFileName, Bitmap b){ 
     int bytes = b.getByteCount(); 

     ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer 
     b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer 
     byte[] array = buffer.array(); 
     // byte[] encodedString = Base64.encode(array, Base64.DEFAULT); 
     byte[] decodedString = Base64.decode(array, Base64.DEFAULT); 
     // Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 

     Timber.d(">> social localFileName"+ localFileName); 
     try { 
      FileOutputStream fileOutputStream = new FileOutputStream(localFileName); 
      fileOutputStream.write(decodedString); 
      fileOutputStream.flush(); 
      fileOutputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

an dieser Linie immer Ausnahme ->byte[] decodedString = Base64.decode(array, Base64.DEFAULT); schlecht base64. Gibt es eine andere Möglichkeit, diese Aufgabe ohne Komprimierung auszuführen?Umwandlung Bitmap byte [] und Schreiben byte [] in Datei: illegalArgument Ausnahme

Stacktrace --->

bei dalvik.system.VMRuntime.newNonMovableArray (native Methode) bei android.graphics.BitmapFactory.nativeDecodeStream (native Methode) 02-08 bei android.graphics.BitmapFactory .decodeStreamInternal (BitmapFactory.java:635) I/dalvikvm:
bei android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:611)
bei android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:391)
bei android.graphics.BitmapFactory.dec odeFile (BitmapFactory.java:417)
bei nl.changer.socialschools.common.Utils.resizeImage (Utils.java:408)
bei nl.changer.socialschools.common.Utils.uploadPhotos (Utils.java:321) bei nl.changer.socialschools.AsyncPostService.createPost (AsyncPostService.java:75) nl.changer.socialschools.AsyncPostService.onHandleIntent (AsyncPostService.java:50) bei android.app.IntentService $ ServiceHandler.handleMessage (IntentService. Java: 65)
bei android.os.Handler.dispatchMessage (Handler.java:110) 02-08 android.os.Looper.loop (Looper.java:193) 02-08 11: 41: 36,214 android. os.HandlerThread.run (HandlerThread.java:61)

+0

zeigen die vollständige Ausnahme Stacktrace und Nachricht. Es erklärt das Problem normalerweise. –

+0

Sie sollten die Bytes in eine Base64-Zeichenfolge codieren. Entschlüsseln Sie nicht, wie Sie es jetzt versuchen. – greenapps

+0

Aber warum möchten Sie Base64 verwenden? Sie können den Bytepuffer direkt in die Datei schreiben. – greenapps

Antwort

0

die Sie interessieren,

public void writeBitmapWithCompress(final String localFileName, Bitmap b){ 

    byte[] image_bytes = getBytes(b); 

    try { 
     FileOutputStream out = new FileOutputStream(localFileName); 
     out.write(image_bytes); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 


// convert bitmap to byte array 
public static byte[] getBytes(Bitmap bitmap) { 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream); 
    return stream.toByteArray(); 
} 
+0

möchte keine Komprimierung verwenden. Willst du Datei direkt schreiben. –