2017-02-08 23 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(); 
     } 
    } 

получая исключение в этой линии ->byte[] decodedString = Base64.decode(array, Base64.DEFAULT); плохо base64. Другой способ выполнить эту задачу без какого-либо сжатия?преобразования растровых изображений в байт [] и написание байт [] в файл: illegalArgument исключение

StackTrace --->

на dalvik.system.VMRuntime.newNonMovableArray (нативный метод) на android.graphics.BitmapFactory.nativeDecodeStream (нативный метод) 02-08 в android.graphics.BitmapFactory .decodeStreamInternal (BitmapFactory.java:635) I/dalvikvm:
на android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:611)
в android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:391)
в android.graphics.BitmapFactory.dec odeFile (BitmapFactory.java:417)
на nl.changer.socialschools.common.Utils.resizeImage (Utils.java:408)
в nl.changer.socialschools.common.Utils.uploadPhotos (Utils.java:321) в nl.changer.socialschools.AsyncPostService.createPost (AsyncPostService.java:75) nl.changer.socialschools.AsyncPostService.onHandleIntent (AsyncPostService.java:50) в android.app.IntentService $ ServiceHandler.handleMessage (IntentService. java: 65)
at 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

показать полную трассировку стека исключений и сообщение. Обычно это объясняет проблему. –

+0

Вы должны «закодировать» байты в строке base64. Не 'decode', как вы пытаетесь сделать сейчас. – greenapps

+0

Но почему вы хотите использовать base64? Вы можете написать буфер байта непосредственно в файл. – greenapps

ответ

0

Попробуйте это,

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

не хотят использовать сжатие. Хотите написать файл напрямую. –

 Смежные вопросы

  • Нет связанных вопросов^_^