андроид вращается изображение вылетает только на определенных телефонах - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть приложение для 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 ]

1 голос
/ 21 сентября 2011

Вероятно, ошибка памяти.Доступная куча зависит от типа телефона.Несмотря на то, что растровые изображения хранятся в собственной памяти (что затрудняет отслеживание их потребления памяти), они ограничены одним и тем же размером кучи.Большие растровые изображения (с 5-мегапиксельной) камерой легко занимают всю память в приложении.Вы должны опубликовать свой журнал ошибок, чтобы быть уверенным.

Для начала: - используйте меньшие изображения

  • для очистки растровых изображений, используйте 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);
0 голосов
/ 21 сентября 2011

андроидика может быть на что-то. Попробуйте :

bitmap.recycle();
rotatedBitmap.recycle();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...