gpt4 book ai didi

android - android中的Uri vs File vs StringPath

转载 作者:搜寻专家 更新时间:2023-11-01 08:36:11 25 4
gpt4 key购买 nike

最近我在做应用程序处理在外部存储上保存图像和加载图像。我对 UriFileStringPath 很困惑。

例如,当从 Gallery 加载图像时,它使用 Uri

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { //Browse Gallery is requested
//Get the path for selected image in Gallery
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

//Access Gallery according to the path
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();

loadImage(picturePath); //load picture according the path
image_View.setImageBitmap(pic); //Show the selected picture
}

然后在解码图像时,它使用 StringPath

private void loadImage(String picturePath) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;

BitmapFactory.decodeFile(picturePath,options);
int height_ = options.outHeight;
int width_ = options.outWidth;
float ratio = width_/height_;
int width = 480;
int height = 480;
if(width_>height_){
height = Math.round(width / ratio);
}else{
width = Math.round(width*ratio);
}

options.inSampleSize = calculateInSampleSize(options, width, height);
options.inJustDecodeBounds = false;
pic=BitmapFactory.decodeFile(picturePath,options);
}

然后当从文件中读取字节时,它使用File

File cacheDir = getBaseContext().getCacheDir();
//Form a directory with a file named "pic"
File f = new File(cacheDir, "pic");

try {
//Prepare output stream that write byte to the directory
FileOutputStream out = new FileOutputStream(f);
//Save the picture to the directory
pic.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

那么,有什么区别呢?它只是用法不同但代表相同的目录吗?

最佳答案

内容 URI 类似于:

content://media/external/images/media/53

这里ContentResolver的作用是让你根据这个URI获取图片,你不需要知道文件名或者文件的其他属性,你只需要这个URI访问图像。

String Path是存储图片的物理地址,如下所示:

file:///mnt/sdcard/myimage.jpg

最后,File 是您需要对文件进行操作的最低处理程序。它使用字符串路径作为参数来创建或打开文件以进行读/写。

在您提供的示例中,这里是进度:

1- 你要求 ContentResolver 根据提供的 URI 给你真实的文件路径

2- 根据提供的路径将位图文件加载到 pic 对象

3- 您创建一个名为“pic”的文件并将pic 对象压缩为JPG 并写入

关于android - android中的Uri vs File vs StringPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com