2012-07-24 99 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