如何使用picasso库直接加载位图,如下所示

Sac*_*are 16 picasso

Picasso.with(context).load("url").into(imageView);
Run Code Online (Sandbox Code Playgroud)

这里代替网址,我想要位图,我怎么能实现这一点.如下 -

Picasso.with(context).load(bitmap).into(imageView);
Run Code Online (Sandbox Code Playgroud)

小智 14

这应该适合你.将返回的URI与Picasso一起使用.

(取自:有没有得到uri的位图而不是将它保存到SD卡?)

public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然它有效,但它不是最好的解决方案,因为它需要“写入存储”权限。 (2认同)

ivo*_*oto 6

我的 Kotlin 解决方案

从数据创建位图

    val inputStream = getContentResolver().openInputStream(data.data)
    val bitmap = BitmapFactory.decodeStream(inputStream)
    val stream = ByteArrayOutputStream()
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
Run Code Online (Sandbox Code Playgroud)

重要提示: 如果您不需要存储图像,您可以避免使用 Picasso 并立即加载图像

    imageView.setImageBitmap(bitmap)
Run Code Online (Sandbox Code Playgroud)

否则存储文件并用毕加索加载它

    val jpegData = stream.toByteArray()

    val file = File(cacheDir, "filename.jpg")
    file.createNewFile()

    val fileOS = FileOutputStream(file)
    fileOS.write(jpegData)
    fileOS.flush()
    fileOS.close()

    Picasso.get().load(Uri.parse(file.path)).into(imageView)
Run Code Online (Sandbox Code Playgroud)