2013-09-26 3 views
1

Я искал и нашел простой код для поворота изображения. Я вытаскиваю изображение из объекта ImageView в растровое изображение, поворачивая его, а затем возвращаю. Я понимаю, что это не самый эффективный метод, но я не думаю, что он должен потерпеть крах без сообщения об ошибке в блоке CATCH.Android: Поворот большого изображения падает без ошибки

Вот мой код. Единственное значение, которое передается, это «r» или «l» в зависимости от того, в каком направлении я хочу повернуть. Изображения Smaler (1500x1500 или меньше) работают нормально. Вещи плохие вокруг размера 2500x2500.

public void rotate(String dir) 
{ 
    try 
    { 
     float angle = (dir.equals("r") ? 90 : -90); 
     Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); 
     Matrix matrix = new Matrix(); 
     matrix.reset(); 
     matrix.postRotate(angle); 
     bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false); 
     imageView.setImageBitmap(bitmap); 
    } 
    catch(Exception e) 
    { 
     Utilities.logError(e.toString()); 
    } 
} 

Любая подсказка о том, почему она рушится и почему она не исключает исключения? Я просто получаю сообщение «Неудачный процесс ... остановился», и меня отбрасывают на экран приветствия моего приложения.

О, для ударов я установил угол в ZERO (жесткий код), и он не сработал. Я подозреваю, что чересчур слишком долго, чтобы повернуть, и Android подходит. Но я не уверен, как подтвердить это как проблему или как сказать Android подождать немного дольше.

Даже если я уменьшу изображение предварительного просмотра для вращения, когда я иду на сохранение, мне придется повернуть изображение полного размера хотя бы один раз и попадет в эту же проблему. Не так ли?

+1

его гормональный сбой после трассировки стеки – Raghunandan

ответ

2

Я могу более или менее гарантировать, не глядя на журналы, которые вы получаете Out Of Memory Exception.

Вам нужно использовать более мелкие изображения или использовать другой способ для вращения, который не использует столько памяти (вы выделяете 2 бита поверхности 2500x2500 в то же время здесь! Это тонны!).

Попробуйте использовать RotateAnimation, чтобы получить эффект.

Надеется, что это помогает :)

+0

Это отчасти память и отчасти проблема тайма-аута. Я вращался в потоке пользовательского интерфейса, и в некоторых случаях он занимал слишком много времени. У меня не хватило памяти, когда мое приложение тоже делало некоторые другие вещи, но я уверен, что это было бы проблемой для многих других устройств. Так много для эмуляторов. Ни у кого из них не было проблемы. Только реальный телефон. БЛАГОДАРЯ! –

Смежные вопросы