我们正在开发一个 Android 应用程序,该应用程序可以捕获图像并将其转换为位图以发布到 Rest 服务。
在创建位图时,我们将 BitmapFactory.Options.isSample Size 配置为 4,这在除 HTC One 之外的所有设备上都可以正常工作。HTC One 中的图像失真。
当我们将值更改为 1 时,它在 HTC 上显示了一个很好的图像,但由于内存问题,应用程序在所有其他设备上崩溃了。
该问题与可用的堆大小有关。
- HTC one 在 HTC one 上显示失真图像的原因是什么?
- 为什么应用程序在 S3 上崩溃,它也具有相同的 16 构建版本,但由于堆大小不可用而崩溃。
- 为什么所有像 droid 这样的低版本手机都适用于 4 的样本大小。
- 检查应用程序可用内存空间并使用可用于使用 BITMAP 的最佳方法是什么。
当我们在清单文件中配置 android:largeHeap 时,这似乎可行,但它似乎不是一个可靠的解决方案。
我能够找到使用相机参数拍摄的照片的大小,然后达到位图的最佳样本大小。下面的代码解决了问题。但这是正确的做法还是我也需要计算样本量而不是使用 1 和 4。
private Bitmap createImaegBitmap(byte[] data)
{
BitmapFactory.Options opt;
opt = new BitmapFactory.Options();
opt.inTempStorage = new byte[16 * 1024];
Parameters parameters = ((ReceiptCollection)getApplication()).getParams();
Size size = parameters.getPictureSize();
int height11 = size.height;
int width11 = size.width;
float mb = (width11 * height11) / 1024000;
if (mb > 4f)
opt.inSampleSize = 4;
else if (mb > 3f)
opt.inSampleSize = 1;
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,opt);
return bitmap;
}