【问题标题】:Converting base64 into bitmap and loading into recycler view将base64转换为位图并加载到回收器视图中
【发布时间】:2016-05-25 02:11:57
【问题描述】:

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

    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);

【问题讨论】:

    标签: android base64 picasso


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      假设您在回收站视图中使用 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 中轻松转换

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-27
        • 2018-05-13
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多