android旋转图像仅在某些手机上崩溃

时间:2011-09-20 21:29:52

标签: android image crash rotation

我有一个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());         
     }
 }

2 个答案:

答案 0 :(得分:1)

可能存在内存错误。可用堆取决于手机的类型。即使位图存储在本机内存中(这使得它们的内存消耗更难跟踪),它们也被限制在相同的堆大小。大位图(来自500万像素)相机很容易耗尽应用程序中的所有内存。 您必须发布错误日志以确定。

对于初学者: - 使用较小的图像

  • 清理位图使用bitmap.recycle();

编辑: 好吧,想一想我很确定它是不记忆的。这就是错误没有被捕获的原因,因为它发生在本机代码中。

这就是你要做的:

解码图像时,请将其重新采样为较小的尺寸:

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)

android可能会有所作为。 Try

bitmap.recycle();
rotatedBitmap.recycle();