如何将Bitmap转换为Uri?

Nul*_*ion 35 android uri bitmap

我正在尝试使用SHARE INTENTAndroid从Facebook,Twitter等分享图像.

我找到了将图像发送到共享意图的代码,但是这段代码需要位图的URI: fullSizeImageUri

这是完整的代码:

private void startShareMediaActivity(Bitmap image) {
    boolean isVideo=false;
    String mimeType="bmp";
    Uri fullSizeImageUri=null;
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType(mimeType);
    intent.putExtra(Intent.EXTRA_STREAM, fullSizeImageUri);
    try {
        startActivity(Intent.createChooser(intent, (isVideo ? "video" : "image")));
    } catch (android.content.ActivityNotFoundException ex) { }
}
Run Code Online (Sandbox Code Playgroud)

请问有人可以帮我将Bitmap转换为Uri吗?

谢谢

Aja*_*jay 66

这是Colin的博客,他建议将位图转换为Uri的简单方法单击此处

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

  • 请注意,这会创建一个将保留在用户库中的图像。 (8认同)
  • 但是如何删除插入的图像?它在文件夹中创建了很多图像.. (6认同)
  • path可以为null,如果是这样,Uri.parse(path)将使app崩溃 (3认同)
  • 不要忘记获取 WRITE_EXTERNAL_STORAGE 权限。否则 insertImage 方法可能返回 null。请参阅:/sf/answers/2469834741/ (3认同)
  • 在 android oreo 中不起作用,String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 路径将变为空。 (2认同)

KK_*_*585 22

String FILENAME = "image.png";
String PATH = "/mnt/sdcard/"+ FILENAME;
File f = new File(PATH);
Uri yourUri = Uri.fromFile(f);
Run Code Online (Sandbox Code Playgroud)

  • 我们不能在不保存位图的情况下得到Uri (5认同)
  • 解析始终将字符串而不是文件作为参数。下次阅读有关功能的详细信息或者测试它们。 (2认同)
  • 对不起Arkde小混淆任何方式感谢提醒 (2认同)

Uzz*_*taf 5

我找到的最新解决方案是这样的。它在 kotlin 中,你可以在 Java 中隐藏它。

    // Get uri of images from camera function
private fun getImageUri(inContext: Context?, inImage: Bitmap): Uri {

    val tempFile = File.createTempFile("temprentpk", ".png")
    val bytes = ByteArrayOutputStream()
    inImage.compress(Bitmap.CompressFormat.PNG, 100, bytes)
    val bitmapData = bytes.toByteArray()

    val fileOutPut = FileOutputStream(tempFile)
    fileOutPut.write(bitmapData)
    fileOutPut.flush()
    fileOutPut.close()
    return Uri.fromFile(tempFile)
}
Run Code Online (Sandbox Code Playgroud)