位图toString并再次返回

sof*_*ply 1 serialization android bitmap

在android中,我通过摄像头拍摄了一张照片,并将其恢复为活动状态:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == Constatnts.ANSWER_TO_LIFE_UNIVERSE_AND_EVERYTHING && data != null && data.getExtras() != null && data.getExtras().get("data") != null) {  
        Bitmap snapshot = (Bitmap) data.getExtras().get("data"); 
        String convert = InputOutput.bitmapToString(this, snapshot);
        Bitmap back = InputOutput.stringToBitmap(convert);
    }  
}
Run Code Online (Sandbox Code Playgroud)

当我将Bitmap的“快照”分配给imageview时,它看起来很好,效果很好。但是,当我将Bitmap'back'分配给imageview时,它不会改变其视图。因此,转换中肯定有问题。这是我进行转换的代码:

public static Bitmap stringToBitmap(String bitmapString) {
    byte[] bytes = Base64.decode(bitmapString, Base64.DEFAULT);
    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    return bitmap;
}

public static String bitmapToString(Context context, Bitmap bitmap) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    bitmap.recycle();
    byte[] byteArray = stream.toByteArray();
    try {
        stream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    stream.write(byteArray, 0, byteArray.length);
    stream = null;
    String strBase64 = Base64.encodeToString(byteArray, Base64.URL_SAFE);
    return strBase64;
}
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?谢谢!

Jav*_*ave 5

这是我曾经尝试进行此转换的代码,它应该可以工作:

public final static String bitmapToString(Bitmap in){
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    in.compress(Bitmap.CompressFormat.PNG, 100, bytes);
    return Base64.encodeToString(bytes.toByteArray(),Base64.DEFAULT);
}
public final static Bitmap stringToBitmap(String in){
    byte[] bytes = Base64.decode(in, Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
Run Code Online (Sandbox Code Playgroud)

您可能需要向close()流中添加一些调用。