gpt4 book ai didi

android - BitmapFactory.decodeFile() 在某些设备中返回 null

转载 作者:行者123 更新时间:2023-11-29 19:05:31 26 4
gpt4 key购买 nike

我正在使用来自 here 的以下代码.我想压缩图像。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
Bitmap bmp = BitmapFactory.decodeFile(filePath, options);

int actualHeight = options.outHeight;
int actualWidth = options.outWidth;

从“相机”、“画廊”和“照片”中选择图像后,我会根据操作系统类型和设备型号在不同设备中获得不同类型的路径。喜欢:

1)/storage/emulated/0/Android/data/...

2)/raw//storage/emulated/0/mb/1511172993547.jpg

3)/2/1/content://media/external/images/media/11647/ORIGINAL/NONE/486073582

如果路径类似于第一个 url,则此代码工作正常。但如果我得到其他类型的图像,则 BitmapFactory.decodeFile() 将返回 null。

有没有办法在所有类型的设备和操作系统版本中压缩图像。

更新:

打开选择器:

Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/*");
startActivityForResult(pickIntent, 1001);

选择图片后:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri imgUri = Uri.fromFile(new File(data.getData().getPath()));
Bitmap cmpBitmap = ImageUtils.compressUriQuality(OpenWallWeb.this, imgUri);
dlgImageToPost.setImageBitmap(cmpBitmap);
...
}

压缩:

public static Bitmap compressUriQuality(Context mContext, Uri selectedImage) {
InputStream imageStream = null;
Bitmap bmp = null;
try {
imageStream = mContext.getContentResolver().openInputStream(
selectedImage);
bmp = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 50, stream);

if (imageStream != null)
imageStream.close();
stream.close();
stream = null;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bmp;
}

最佳答案

电视 2)/raw//storage/emulated/0/mb/1511172993547.jpg

如果用户从 Gallery 或 Photos 中选择图片,那不是您会得到的路径。当然,它不是可用于 .decodeFile() 的文件系统路径。你是怎么得到的?

3) /2/1/content://media/external/images/media/11647/ORIGINAL/NONE/486073582

那不是有效的内容方案路径。你是怎么得到的?当然不能用于 .decodeFile()。

  i'm getting different type of paths 

如果你“表现正常”,你永远不会得到这样的路径。那么你在做什么呢?基本 uri 处理错误?

using following code from here. 

正如您现在所看到的,对于很大一部分来说,这是非常肮脏的示例代码。

any way to compress image in all types of devices and OS versions.

当然。直接使用获取的selected uri即可。为它打开一个 InputStream 并改用 .decodeStream()。

我的天..你没有直接使用 uri。

 Bitmap cmpBitmap = ImageUtils.compressUriQuality(OpenWallWeb.this, imgUri);

更改为

  Bitmap cmpBitmap = ImageUtils.compressUriQuality(OpenWallWeb.this, data.getData());

关于android - BitmapFactory.decodeFile() 在某些设备中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47390489/

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