3

我想使用 WVGA854 皮肤和 240 lcd 密度(摩托罗拉 Droid)在 Android 2.0.1 中显示存储在 SD 卡中的 480x320 JPEG 文件。

但是,当我通过 Drawable.createFromPath() 创建 BitmapDrawable 时,生成的 BitmapDrawable 具有以下值:

mBitmapWidth = 320

mBitmapHeight = 213

mTargetDensity = 160

清单包括以下配置:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" />
<supports-screens 
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
 anyDensity="true"
/>

显然 Android 正在调整位图的大小。这种行为的原因可能是什么?我怎样才能避免它?

先感谢您。

4

1 回答 1

5

Drawable.createFromPath() 是一种在其实现中使用 BitmapFactory 的便捷方法。似乎从 API 级别 4 开始,Android 会自动重新缩放所有位图可绘制对象和其他资源。

要获得位图的原始大小,需要将可绘制对象转换为可绘制位图并使用 BitmapDrawable.geBitmap().getWidth() 和 BitmapDrawable.geBitmap().getWidth()。

另一种方法可能是直接使用 BitmapFactory 并使用 BitmapFactory.Options.inScaled 关闭重新缩放。此属性仅从 API 级别 4 开始可用,因此如果您想针对 API 级别 3 设备,您可能需要使用反射来检查它的存在。

我仍然不明白为什么 SD 卡图像需要这种重新缩放以及这对程序员有何好处。是的,160 密度的 320x213 区域(大约)变成(大约)240 密度的 480x320 区域,但是如果 Drawable.createFromPath() 将 240 密度的 480x320 可绘制对象返回给以 240 密度运行的应用程序,这不是更有意义吗?

于 2009-12-30T18:07:12.263 回答