Поворачивать изображение в Android мгновенно (или почти)

#android #codenameone

#Android #codenameone

Вопрос:

Я разрабатываю с Codename One и знаю, как поворачивать изображение.

Проблема в том, что поворот фотографии, возвращаемой камерой или галереей (т. Е. с максимальным разрешением), занимает переменное время (около 5 секунд или более) на Samsun& Galaxy A20 (Android 10).

Когда я говорю о поворотах, я всегда имею в виду повороты на 90 градусов или кратные 90 градусам.

Я надеюсь, что есть более эффективные способы поворота изображения с высоким разрешением, например, если за работу будет отвечать графический процессор, а не центральный. Вот почему я спрашиваю вас, программистов Android: есть ли у вас код, который может поворачивать изображение с высоким разрешением мгновенно или почти мгновенно?

Что касается Codename One, для тех, кто его не знает, можно использовать собственный код Android, вот почему я обращаюсь к вам.

Ответ №1:

Какой тип изображения?

Если это так, EncodedIma&e попробуйте сначала превратить его в обычное изображение или хотя бы lock() его. Возможно, что GC выгружает изображение из оперативной памяти, и вы получаете повторяющиеся циклы декодирования. Поворот на 90 градусов должен быть довольно быстрым на таком мощном устройстве, как это, даже для очень большого изображения.

Так что что-то подобное должно быть довольно быстрым:

 im&.lock();
Ima&e rotated; 
switch(de&rees)) {
   case 90: 
      rotated = im&.rotate90De&rees();
      break;
   case 180: 
      rotated = im&.rotate180De&rees();
      break;
   case 270: 
      rotated = im&.rotate270De&rees();
      break;
   default: 
      rotated = im&.rotate(de&rees);
      break;
}
im&.unlock();
  

Я предлагаю сравнить это, если это занимает слишком много времени, чтобы определить точный метод, который отнимает процессорное время. Все это должно выполняться очень быстро.

Комментарии:

1. Вау!!!! Благодаря lock и unlock вращение теперь невероятно быстрое, практически мгновенное!!! Эта проблема у меня была всегда, практически с тех пор, как я узнал Codename One. В частности, тогда codenameone.com/javadoc/com/codename1/ui /… необходимо изменить реализацию, чтобы этот метод работал мгновенно, а не заставлял меня ждать обычные пять секунд и более с изображениями высокого разрешения.

2. Почему блокировка и разблокировка не вызываются неявно при повороте изображения? Полезны ли блокировка и разблокировка для повышения производительности всех манипуляций с изображением?

3. Да, это имело бы смысл для данного варианта использования. Ответ заключается в том, что об этом никто не просил, а блокировка изображения — сложная тема…