BitmapFactory.decodeResource() 忽略 inScaled
BitmapFactory.decodeResource() ignoring inScaled
当 inJustDecodeBounds 也是 "true" 时,BitmapFactory.decodeResource() 似乎忽略了 inScaled。
在这段代码中:
Resources res = getResources ();
DisplayMetrics metrics = res.getDisplayMetrics ();
BitmapFactory.Options options = new BitmapFactory.Options ();
options.inScaled = true;
options.inDensity = DisplayMetrics.DENSITY_HIGH; // resolution of bitmap in resources
options.inTargetDensity = metrics.densityDpi; // screen resolution
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeResource (res, srcId, options);
logD ("IVH decodeBitmapResource.1: " + options.outWidth + "," + options.outHeight + " - " + srcId);
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeResource (getResources(), srcId, options);
logD ("IVH decodeBitmapResource.2: " + options.outWidth + "," + options.outHeight + " - " + srcId);
我在日志文件中得到以下输出:
IVH decodeBitmapResource.1: 420,747 - 2130837613
IVH decodeBitmapResource.2: 840,1494 - 2130837613
我所做的只是将 inJustDecodeBounds 从 true 更改为 false。我错过了什么?
也许答案应该很明显:inJustDecodeBounds 应该忽略所有 其他指令,甚至缩放。
下面的代码,将inJustDecodeBounds设置为"true"时解决了问题:
float scale = (float)metrics.densityDpi / (float)DisplayMetrics.DENSITY_HIGH;
imageWidth = (int) (options.outWidth * scale + 0.5);
imageHeight = (int) (options.outHeight * scale + 0.5);
话虽如此,加油Google。您已获得此 API 中的所有代码;你为什么要让我重写它。只需提供一个不同的标志即可完成除渲染位图之外的所有操作。然后,使用一个标志,我可以计算边界,并通过翻转标志,渲染位图以完全适合。
当 inJustDecodeBounds 也是 "true" 时,BitmapFactory.decodeResource() 似乎忽略了 inScaled。
在这段代码中:
Resources res = getResources ();
DisplayMetrics metrics = res.getDisplayMetrics ();
BitmapFactory.Options options = new BitmapFactory.Options ();
options.inScaled = true;
options.inDensity = DisplayMetrics.DENSITY_HIGH; // resolution of bitmap in resources
options.inTargetDensity = metrics.densityDpi; // screen resolution
options.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeResource (res, srcId, options);
logD ("IVH decodeBitmapResource.1: " + options.outWidth + "," + options.outHeight + " - " + srcId);
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeResource (getResources(), srcId, options);
logD ("IVH decodeBitmapResource.2: " + options.outWidth + "," + options.outHeight + " - " + srcId);
我在日志文件中得到以下输出:
IVH decodeBitmapResource.1: 420,747 - 2130837613
IVH decodeBitmapResource.2: 840,1494 - 2130837613
我所做的只是将 inJustDecodeBounds 从 true 更改为 false。我错过了什么?
也许答案应该很明显:inJustDecodeBounds 应该忽略所有 其他指令,甚至缩放。
下面的代码,将inJustDecodeBounds设置为"true"时解决了问题:
float scale = (float)metrics.densityDpi / (float)DisplayMetrics.DENSITY_HIGH;
imageWidth = (int) (options.outWidth * scale + 0.5);
imageHeight = (int) (options.outHeight * scale + 0.5);
话虽如此,加油Google。您已获得此 API 中的所有代码;你为什么要让我重写它。只需提供一个不同的标志即可完成除渲染位图之外的所有操作。然后,使用一个标志,我可以计算边界,并通过翻转标志,渲染位图以完全适合。