gpt4 book ai didi

android - 如何从 Api 级别 30 中的 imageUri 获取位图?

转载 作者:行者123 更新时间:2023-12-04 23:52:47 31 4
gpt4 key购买 nike

我在旧版本中使用 getBitmap 方法,但我找不到 getBitmap From Uri 的任何替代方法。

        try {
bitmap = MediaStore.Images.Media.getBitmap(contentResolver, imageUri);
} catch (IOException e) {
e.printStackTrace();
}

现在我从 android 指南中找到了另一种方法,但仍然无法正常工作。我不知道如何在工作线程中执行此方法。Guide 说这个方法应该在工作线程中运行。谁能帮助我如何做到这一点?

        try {
bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(contentResolver, imageUri));
} catch (IOException e) {
e.printStackTrace();
}

我创建了一个简单的类来从 imageUri 获取位图。在这里。

public class BitmapResolver {


@SuppressWarnings("deprecation")
private static Bitmap getBitmapLegacy(@NonNull ContentResolver contentResolver, @NonNull Uri fileUri){
Bitmap bitmap = null;

try {
bitmap = MediaStore.Images.Media.getBitmap(contentResolver, fileUri);
} catch (IOException e) {
e.printStackTrace();
}

return bitmap;
}

@TargetApi(Build.VERSION_CODES.P)
private static Bitmap getBitmapImageDecoder(@NonNull ContentResolver contentResolver, @NonNull Uri fileUri){
Bitmap bitmap = null;

try {
bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource(contentResolver, fileUri));
} catch (IOException e) {
e.printStackTrace();
}

return bitmap;
}

public static Bitmap getBitmap(@NonNull ContentResolver contentResolver, Uri fileUri){
if (fileUri == null){
return null;
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
return getBitmapImageDecoder(contentResolver, fileUri);
} else{
return getBitmapLegacy(contentResolver, fileUri);
}
}
}

最佳答案

看看documentation

This method was deprecated in API level 29.loading of images should be performed through ImageDecoder#createSource(ContentResolver, Uri), which offers modern features like PostProcessor.

所以你必须使用ImageDecoder.createSource,像这样:

Bitmap bitmap = null;
ContentResolver contentResolver = getContentResolver();
try {
if(Build.VERSION.SDK_INT < 28) {
bitmap = MediaStore.Images.Media.getBitmap(contentResolver, imageUri);
} else {
ImageDecoder.Source source = ImageDecoder.createSource(contentResolver, imageUri);
bitmap = ImageDecoder.decodeBitmap(source);
}
} catch (Exception e) {
e.printStackTrace();
}

以上应该是线程安全的。

关于android - 如何从 Api 级别 30 中的 imageUri 获取位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65210522/

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