作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在旧版本中使用 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);
}
}
}
最佳答案
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/
我是一名优秀的程序员,十分优秀!