【问题标题】:Bitmap decode issues with Android LollipopAndroid Lollipop 的位图解码问题
【发布时间】:2015-03-09 15:50:01
【问题描述】:

在 Lollipop 设备中解码图像时遇到问题。

下图显示了一个“测试应用”,它解码了 4 个 png 文件。

左 = kitkat 4.4.4,右 = 棒棒糖 (5.0.1)

两者都使用相同的设备类型:MOTO G 第二代。

相关代码

Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inDither = true;
options.inScaled = true;
options.inDensity = 160;
options.inTargetDensity = 320;
Bitmap bmp = BitmapFactory.decodeStream(new ByteArrayInputStream(imageAsBytes), null, options);

屏幕指标:

Density......: 2
ScaledDensity: 2
DensityDPI...: 320
Size.........: 720x1184

我在网上找到了任何解释。

谁能指出为什么会这样?

编辑:

因为它只发生在棒棒糖 + TargetDensity = 320 + Density = 160 的情况下,所以我做了以下解决方法:

if ((android.os.Build.VERSION.SDK_INT >= 21) && (options.inTargetDensity == 320) && (options.inDensity = 160))
{
    options.inDensity = options.inTargetDensity;
}

但我真的很感谢一些提示,以弄清楚发生了什么......

【问题讨论】:

  • 嗨,克里斯蒂安。您是否同时找到了解决方案。我有完全一样的问题?克里斯@guruk.com
  • 只是一种解决方法。检查问题的编辑...干杯。
  • 谢谢...这很奇怪。似乎它不仅仅是 moto g 。而是几个摩托罗拉设备。我想知道为什么没有其他人写过。
  • 是的,我也有同样的疑惑……我看到没有人谈论它。
  • 小改进:options.inDensity = options.inTargetDensity = DisplayMetrics.DENSITY_DEFAULT;无需做额外的检查点。我在 4.4.2、5.0.1 甚至 5.1 上对其进行了测试

标签: android android-5.0-lollipop bitmapfactory


【解决方案1】:

在我的情况下,解决方案是(添加 setDensity 并使用在 Density 上看起来的新 BitmapDrawable)。希望它也对你有帮助。 (顺便说一句。这 2 行,确实花了我 3 天 :)

 final Bitmap output = Bitmap.createBitmap(44, 65, Bitmap.Config.ARGB_8888);

 /*NEW -> */ output.setDensity(320);

 final Canvas canvas = new Canvas(output);
 final int color = Color.RED;
 final Paint paint = new Paint();

 // BitmapDrawable bmd = new BitmapDrawable(output);
 /*Change into*/
 BitmapDrawable bmd = new BitmapDrawable(Resources.getSystem(),output);

【讨论】:

  • 如果在“旧”设备上运行会中断吗?喜欢低分辨率屏幕的 Android 2.3?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多