#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. Да, это имело бы смысл для данного варианта использования. Ответ заключается в том, что об этом никто не просил, а блокировка изображения — сложная тема…