我需要使用 InputStream 创建一些 BitmapDrawables。我正在从 Uri 获取 InputStreams。但是,资源可绘制对象以错误的目标密度绘制。
我正在使用的设备的目标密度应为 320。相反,正在创建的 BitmapDrawable 的目标密度为 160(不好,图像显示一半大小)
在以下示例中,目标密度错误 - 将其设置为 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 实际上指向资源,而不是磁盘、内容、资产等”的特殊情况,我的整个管道就会得到简化