从InputStream创建的BitmapDrawable具有错误的目标密度

时间:2012-12-19 19:52:00

标签: android image android-layout

我需要使用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实际上指的是资源,而不是磁盘,内容,资产等”

0 个答案:

没有答案