如何将位图图像转换为Uri

5

我在任何地方都没有找到这个问题的答案。

位图图像在应用程序中进行处理,这意味着没有文件路径来获取图像。

以下是将Uri转换为位图的方法。

 if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK) {
        Uri selectedImageUri = data.getData();

        imageview.setImageURI(selectedImageUri);

        try {
            bitmap1 = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "" + e, Toast.LENGTH_SHORT).show();
        }

        bitmap1.compress(Bitmap.CompressFormat.JPEG, 7, bytearrayoutputstream);

        BYTE = bytearrayoutputstream.toByteArray();

        bitmap2 = BitmapFactory.decodeByteArray(BYTE, 0, BYTE.length);

        imagetoo.setImageBitmap(bitmap2);
    }

现在我如何重新转换为Uri?


可能是如何将位图转换为Uri?的重复问题。 - Brijesh Kumar
2个回答

13

URI是URL的超集,这意味着它是文件的路径。而位图是由点阵组成的数字图像。位图表示数据,而URI表示数据保存的位置。所以,如果您需要为位图获取URI,只需要将其保存在存储设备上。在Android中,您可以通过Java IO来完成,如下所示:首先创建一个您想要保存它的文件:


URI是URL(Uniform Resource Locator)的超集,表示文件的路径。而Bitmap是由点阵组成的数字图像,表示一种数据类型;URI则表示数据所保存的位置。如果您需要为一个Bitmap获取URI,则只需将其保存到设备上即可。在Android中,您可以使用Java IO实现此操作,方法如下:首先,创建一个您想要将该Bitmap保存到其中的文件。
public File createImageFile() {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File mFileTemp = null;
    String root=activity.getDir("my_sub_dir",Context.MODE_PRIVATE).getAbsolutePath();
    File myDir = new File(root + "/Img");
    if(!myDir.exists()){
        myDir.mkdirs();
    }
    try {
        mFileTemp=File.createTempFile(imageFileName,".jpg",myDir.getAbsoluteFile());
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    return mFileTemp;
}

然后清除它,你就会得到URI。

 File file = createImageFile(context);
 if (file != null) {
    FileOutputStream fout;
    try {
        fout = new FileOutputStream(file);
        currentImage.compress(Bitmap.CompressFormat.PNG, 70, fout);
        fout.flush();
    } catch (Exception e) {
        e.printStackTrace();
    }
    Uri uri=Uri.fromFile(file);
}

这只是一个示例,不是适用于所有Android版本的空闲代码。要在Android N及以上版本中使用Uri,您应该使用FileProvider来提供文件。请遵循Commonsware的答案。


很好的解释。我有这个想法,但不知道如何实现。让我试一下。 - Lucem
1
非常感谢您! - niva
"activity" 和 "context" 在 "String root=activity.getDir..." 和 "File file = createImageFile(context);" 中分别代表什么? - E.Akio

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接