我正在编写一个自定义类。在实际绘制之前,需要计算一个位图以进行一些预处理和调整大小。位图本身是经过预处理的 9-patch 图像。在构造函数中,有以下代码:
BitmapFactory.Options bmpOptions = new BitmapFactory.Options();
bmpOptions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), BITMAP_ID, bmpOptions);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), BITMAP_ID);
Log.d(getClass().getSimpleName(), "width: " + bmp.getWidth() + " " + bmpOptions.outWidth + "; height: " + bmp.getHeight() + " " + bmpOptions.outHeight);
运行 Android 3.2.2 的 7" Samsung Galaxy Tab 7 上的输出:
宽度:556 556;身高:890 890
运行 Android 4.1 的 10" Motorola Xoom 上的输出:
宽度:556 556;身高:890 890
运行 Android 4.2.2 的 7" Nexus 7 上的输出:
宽度:740 834;高度; 1185 1335
位图的实际尺寸为:
分辨率:558 x 892
高清画质:836 x 1337
位图是经过预处理的 9-patch,这就是为什么尺寸相差 2 个像素的原因。我不明白为什么 Nexus 7 上的 hdpi 资产会产生如此大的不同。
我也尝试过这些配置:
bmpOptions.inScaled = false;
和
bmpOptions.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
和
bmpOptions.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
bmpOptions.inDensity = getResources().getDisplayMetrics().densityDpi;
和
bmpOptions.inTargetDensity = 0;
bmpOptions.inDensity = 0;
我也尝试了相反的方法并为解码的位图创建第二个 BitmapFactory.Options 并告诉它根本不缩放。
所有这些都提供了相同的精确结果。