我有一个Android应用程序,允许用户拍照。在这种努力中,图像并不总是正确显示,具体取决于图像捕获期间手机的方向。我提供了一个旋转图像功能,适用于大多数手机,但不适用于所有手机。事实上,当它无法正常工作时,应用程序会崩溃。旋转功能如下所示。我感谢所有可以在所有手机上使用此功能的反馈。此外,应用程序崩溃并且不会调用错误陷阱。
private void rotateImage(float degrees){
try{
String imageFile = Environment.getExternalStorageDirectory()+"/"+Imagefile;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
// resize the bit map
//matrix.postScale(scaleWidth, scaleHeight);
// rotate the Bitmap
Matrix matrix = new Matrix();
matrix.postRotate(degrees);
// create the new Bitmap
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
imageAsset.setImageBitmap(rotatedBitmap);
// clean up
bitmap = null;
rotatedBitmap = null;
matrix = null;
}catch(Exception e){
utility.logError(this,"{"+CLASS_NAME+"}[rotateImage] Error: "+e.getMessage());
}
}
答案 0 :(得分:1)
可能存在内存错误。可用堆取决于手机的类型。即使位图存储在本机内存中(这使得它们的内存消耗更难跟踪),它们也被限制在相同的堆大小。大位图(来自500万像素)相机很容易耗尽应用程序中的所有内存。 您必须发布错误日志以确定。
对于初学者: - 使用较小的图像
编辑: 好吧,想一想我很确定它是不记忆的。这就是错误没有被捕获的原因,因为它发生在本机代码中。
这就是你要做的:
解码图像时,请将其重新采样为较小的尺寸:
BitmapFactory.Options resample = new BitmapFactory.Options();
resample.inSampleSize = 4; // whatever number seems apropriate 4 means 1/4 of the original
bitmap = BitmapFactory.decodeFile(imageFile, resample);
答案 1 :(得分:0)
bitmap.recycle();
rotatedBitmap.recycle();