2012-07-24 60 views
3

在我的應用程序中,我在編碼和解碼圖像時遇到了一個小問題,將其傳遞給Web服務。 獲取位圖圖像後,我將其轉換爲byte []並編碼爲String值,但在某些情況下,它顯示錯誤,我不知道它爲什麼會出現。 還有一個疑問是Base64類只支持將位圖圖像轉換爲字符串或任何其他可用的工具。在Android應用中使用Base64進行圖像編碼和解碼

在此先感謝...

+1

發佈您的錯誤和代碼。 – rajpara 2012-07-24 08:49:02

+0

它表現出像內存異常我認爲字符串將不會舉行那麼多大字符串值是真的... – Srinivasan 2012-07-24 08:56:26

回答

12

在OutOfMemoryError異常的情況下,下面的代碼可以幫助我。

public String BitMapToString(Bitmap bitmap){ 
     ByteArrayOutputStream baos=new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos); 
     byte [] b=baos.toByteArray(); 
     String temp=null; 
     try{ 
     System.gc(); 
     temp=Base64.encodeToString(b, Base64.DEFAULT); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     }catch(OutOfMemoryError e){ 
      baos=new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG,50, baos); 
      b=baos.toByteArray(); 
      temp=Base64.encodeToString(b, Base64.DEFAULT); 
      Log.e("EWN", "Out of memory error catched"); 
     } 
     return temp; 
    } 

基本上我所做的是:我趕上的OutOfMemoryError,並在catch塊我50%的調整,然後我把它編碼字符串。

+0

好的工作夥計...但它會影響像素的權利... – Srinivasan 2012-07-24 09:09:27

+0

@Sri右花花公子,它將調整圖像大小,因爲我必須編碼大圖像(大約3-5 MB)並需要發送到服務器。 – rajpara 2012-07-24 09:13:07

+0

是的...無論如何感謝您的支持雷... – Srinivasan 2012-07-24 09:17:58

2

試試我下面的示例代碼項目

Bitmap bmp = (Bitmap) data.getExtras().get("data"); 

     img.setImageBitmap(bmp); 
     btnadd.requestFocus(); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     byte[] b = baos.toByteArray(); 
     encodedImageString = Base64.encodeToString(b, Base64.DEFAULT); 

     byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT); 
     Bitmap bmimage = BitmapFactory.decodeByteArray(bytarray, 0, 
       bytarray.length); 
+0

感謝您的支持...我也這樣做是否有任何其他工具可以做同樣的事情? – Srinivasan 2012-07-24 08:58:43

+1

嘗試上面這是我完成的項目之一的代碼片段..它會正常工作。 – Yash 2012-07-24 09:01:21

+0

非常感謝你Yash..Now它是有用的... – Srinivasan 2012-07-24 09:05:59