无法将位图转换为字符串,然后使用BitmapFactory.decodeByteArray返回位图

时间:2016-06-23 02:16:11

标签: android bitmap base64

我将basemap编码为字符串,以便将其作为JSON对象的一部分发送。图像的接收者将获得该字符串并再次将其转换为图像。

如果这完全相关,我就是为Android应用做这个。

将位图转换为字符串似乎工作正常,但在将字符串转换回位图时,我得到的是NullPointerException。

我试图将其归结为基础知识(并转换为字符串并返回到相同方法中的位图进行测试),所以我有以下内容:

public static void convertBitmapToBase64String(Context context, String filename, int maxStringSize)
{
    Bitmap originalBmp = PicUtils.getBitmapFromFilename(filename, null, -1);
    String base64Image = PicUtils.convertBitmapToBase64StringFromFile(context, TEMP_FILENAME);

    // The encoded string is not null, so encoding seems to work.
    DataUtils.log("base64Image length is " + base64Image.length());

    // Test if we can convert back
    final byte[] decodedString = Base64.decode(base64Image, Base64.DEFAULT);

    // This returns null! Is failing here.
    Bitmap decodedByteBitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
}

public static Bitmap getBitmapFromFilename(String filename)
{
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filename, options);
    Bitmap finalBitmap = BitmapFactory.decodeFile(filename);
    return finalBitmap;
}

public static String convertBitmapToBase64StringFromFile(Context context, String filename)
{
    try {
        FileInputStream fis = context.openFileInput(filename);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        Base64OutputStream outputStream = new Base64OutputStream(byteArrayOutputStream, Base64.DEFAULT);
        IOUtils.copy(fis, outputStream);
        return new String(byteArrayOutputStream.toByteArray(),"UTF-8");

    } catch (Exception e) {
        e.printStackTrace();
        DataUtils.log(e.getMessage());
        return null;
    }
}

任何提示都表示赞赏!

1 个答案:

答案 0 :(得分:0)

这是我用来解决问题的链接。我希望这对你也有用。

http://androidtrainningcenter.blogspot.in/2012/03/how-to-convert-string-to-bitmap-and.html