android - 将位图转换为base64字符串并保存在共享首选项中

标签 android bitmap base64 sharedpreferences

在我的 onCreate 方法中,我有一个位图图像(从另一个 Activity 传输)。

Intent intent = getIntent();
    Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapClothes");

在 onCreate 方法下面,我编写了一个将位图转换为 Base64 字符串的方法。

public static String encodeToBase64(Bitmap bitmap){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
    Log.d("Image log:", imageEncoded);
    return imageEncoded;
};

最后,我在共享首选项中保存的方法:

public void savepic (View view){
    SharedPreferences mypreference = getSharedPreferences("image", Context.MODE_PRIVATE);
    String Pic1 = "image1";
    SharedPreferences.Editor editor = mypreference.edit();
    editor.putString("Pic1",encodeToBase64(bitmap));
    editor.commit();
};

但是,在下面的以下行中,它似乎无法读取我的位图变量(无法解析符号位图)。我真的不知道该怎么办...非常感谢任何帮助~

editor.putString("Pic1",encodeToBase64(bitmap));

最佳答案

我在我的项目中做了同样的事情。

位图转换并存储到共享首选项

Bitmap photo = (Bitmap) intent.getParcelableExtra("BitmapClothes");                    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] b = baos.toByteArray();
    String temp = Base64.encodeToString(b, Base64.DEFAULT);
    myPrefsEdit.putString("url", temp);
    myPrefsEdit.commit(); 

从共享首选项中检索并将其加载到 ImageView

String temp = myPrefs.getString("url", "defaultString");
        try {
            byte[] encodeByte = Base64.decode(temp, Base64.DEFAULT);
            Bitmap bitmap = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
            picture.setImageBitmap(bitmap);
        } catch (Exception e) {
            e.getMessage();
        }   

关于android - 将位图转换为base64字符串并保存在共享首选项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42039404/

相关文章:

qt - Qt Quick QML 中的位图字体

android - 如何使用 MediaCodec 将位图编码为视频?

java - base64 编码字符串的 Junit 测试

node.js - 通过 NodeJS 中的 Base64 编码处理图像/jpeg 响应并在 UI 上显示

c++ - OpenCV 在使用 C++ 的 iOS 上使用 base64 通过 HTTP 发送图像

android - 错误 : No resource identifier found for attribute 'adSize' in package 'com.google.example' main. xml

java - 如何在 android 'java' 中将位图对象转换为图像对象,反之亦然

java - 计步器读数异常

android - 您的设备与某些设备的此版本不兼容

java - 图像转换为位图后,图像不显示