我需要使用InputStream创建一些BitmapDrawables。我从Uri获得InputStreams。但是,资源可绘制的目标密度错误。
我正在使用的设备应该具有320的目标密度。而是创建目标密度为160的BitmapDrawable(错误,图像显示为半尺寸)
在以下示例中,目标密度错误 - 将其设置为160:
Uri fromResource = new Uri.Builder()
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.authority("com.myapp.whatever")
.path(String.valueOf(R.drawable.default_image))
.build();
InputStream resourceStream = context.getContentResolver().openInputStream(fromResource);
// correct image, wrong size
Drawable resourceDrawable = new BitmapDrawable(context.getResources(), resourceStream);
如果我使用另一种方式,它会正确设置目标密度 - 设置为320:
// same image, but right size
Drawable thisWayWorks = context.getResources().getDrawable(R.drawable.default_image);
为什么第一个示例中的目标密度错误? BitmapDrawable不应该使用传入的Resources obj正确设置密度吗?
“default_image”具有md,hd和xd资产。我尝试测试删除md和hd资产,以便我知道只加载了xd图像,但结果相同。
更多信息,为什么我要这样做:
我(应该)在磁盘上有一个图像,另一个默认图像作为可绘制资源(显示无法找到磁盘上的图像)。如果我总是可以使用Uri加载图像,那么我的整个管道都会得到简化,并且没有特殊情况下“这个Uri实际上指的是资源,而不是磁盘,内容,资产等”