在Android应用程序中使用Base64进行图像编码和解码

时间:2012-07-24 08:47:25

标签: android android-widget

在我的应用程序中,我遇到了一个小问题,即将图像编码和解码为String并将其传递给Web服务。        获取位图图像后,我将其转换为byte []并编码为String值但在某些情况下它显示错误我不知道它为什么会出现。        还有一个疑问是Base64类仅支持将Bitmap图像转换为String或任何其他可用的工具。

提前致谢...

2 个答案:

答案 0 :(得分: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%然后我将其编码为字符串。

答案 1 :(得分: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);