Intereting Posts
Как загружать плитки из большого растрового изображения в Android? Должен ли я заменить ActionBarActivity на AppCompatActivity? Android – получение ошибки «приложение не может выполнить это действие» при попытке отправить электронное письмо? Есть ли кэш памяти для SQLite в Android и как его выпустить или очистить? Неизвестное исключение в parseSdkContent В приложении Billing V3 Эффективный способ управления потоками RxJava Как загрузить изображение с SD-карты с помощью библиотеки Picasso Использовать Xlint: устаревание с помощью android Как получить атрибуты с пространством имен «андроид» в пользовательском TextView Как повторить последнюю команду sql, выполненную в командной строке sqlite? Android: можно ли нарисовать вид сверху карты в виде наложения Невозможно масштабировать Drawable с помощью ScaleDrawable Ошибка Android «gps требует ACCESS_FINE_LOCATION», хотя мой файл манифеста содержит это У меня есть ошибка: setOnItemClickListener не может использоваться со счетчиком, что не так?

Самый быстрый способ поворота растрового изображения большого размера

Я работаю с изображениями большого размера, и когда я пытаюсь повернуть их (applying matrix on the bitmap) происходит много секунд. Я видел, что галерея систем Android может выполнить эту задачу очень быстро. Как это возможно?

Я думал, что вы выполняете поворот на asyncTask, применяя только поворот ImageView (который не занимает много времени) в основном потоке, но если приложение будет убито до того, как asyncTask будет доведено до конца, приложение окажется в несогласованном состоянии ,

Это мой код поворота растрового изображения, который занимает много времени для больших растровых изображений:

 Matrix mat = new Matrix(); mat.setRotate(90); bMap = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), mat, true); 

При внесении изменений в большое изображение создайте его растровую копию низкого качества и используйте его для отображения мгновенного вращения или других эффектов редактирования. Когда пользователь остановлен, движение (или левое управление ползунком) замените низкокачественное растровое изображение исходным изображением с теми же эффектами, которые применяются к нему. Это значительно улучшит работу пользователей. Попробуйте и дайте мне знать.

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

Это простейший поворот на холсте

 canvas.save(); //save the position of the canvas canvas.rotate(angle, X + (imageW / 2), Y + (imageH / 2)); //rotate the canvas canvas.drawBitmap(imageBmp, X, Y, null); //draw the image on the rotated canvas canvas.restore(); // restore the canvas position.