将 base64 转换为位图并加载到回收器视图中



我正在尝试将base64图像转换为位图图像,然后使用毕加索库将其加载到回收器视图中。但是,每当我运行代码时,我都会收到一个错误,说我需要将 URI 传递到 piasso 方法中。

    public String getImage(){
      Context context =null;
        byte[] decodedString = Base64.decode(image, Base64.URL_SAFE);
        Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        decodedByte.compress(Bitmap.CompressFormat.PNG, 100, bytes);
      path = MediaStore.Images.Media.insertImage(context.getContentResolver(), decodedByte, null, null);
        return Uri.parse(path);    
}

数据适配器:

 Picasso.with(context).load(data.get(i).getImage()).into(holder.reportImage);

下载并解码位图后,使用图像加载库就没有意义了。所有好处(请求队列和缓存)都将丢失。您可以简单地使用holder.reportImage.setImageBitmap(bmp);

另一种方法是编写一个自定义RequestHandler,它将在下载后解码 base64 数据。

假设您在回收器视图中使用 base64 图像作为项目的占位符,我建议您使用此方法将 base64 字符串转换为位图 -

 fun fromBase64ToBitmap(context: Context, base64string: String?): BitmapDrawable {
    val decodedString = Base64.decode(string, Base64.DEFAULT)
    val bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
    return BitmapDrawable(context.resources, bitmap)
}

并设置

picasso.load(your_high_quality_image)
       .placeholder(bitmapDrawableFromAboveMethod)
       .into(imageHolder)

希望这有帮助。

注意:代码是用 Kotlin 编写的,但您可以轻松地在 java 中转换它

最新更新