2

我需要使用 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 实际上指向资源,而不是磁盘、内容、资产等”的特殊情况,我的整个管道就会得到简化

4

0 回答 0