【问题标题】:How To Convert A Bitmap Image To Uri如何将位图图像转换为 Uri
【发布时间】:2017-02-25 19:35:37
【问题描述】:

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

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

下面是如何将 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

【问题讨论】:

标签: android bitmap android-image


【解决方案1】:

URI 是 URL 的超集,表示它是文件的路径。而位图是由点矩阵组成的数字图像。位图表示数据,uri表示保存数据的位置。所以如果您需要获取位图的URI,您只需将其保存在存储中。在 android 中,您可以通过 Java IO 来执行此操作,如下所示:首先创建一个要保存它的文件:

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 的回答。

【讨论】:

  • 很好的解释。我有这个想法,我知道如何把它拿出来。让我一分钟试试
  • 非常感谢!
  • 什么是“String root=activity.getDir...”和“File file = createImageFile(context);”上的“activity”和“context”分别?
【解决方案2】:

使用compress() on Bitmap 将位图写入文件。然后,use FileProvider 最有可能提供该文件,getUriForFile() gives you the Uri corresponding to the file

IOW,您不会将位图“转换”为Uri。您将位图保存在某个位置,它会为您提供Uri

【讨论】:

    猜你喜欢
    • 2012-01-07
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多