Как повернуть bitmap android studio

Поворот Bitmap изображения

Здравствуйте. Есть изображения Bitmap. вывожу их на канвас с помощью canvas.drawBitmap(bitmap, x, y, null). Нужно вывести эти изображения с поворотом на угол альфа относительно центра. Картинка квадратная, если это важно. Как реализовать можно?

1) Методом научного тыка сделал так

Всё бы неплохо, но тут изображение выводится по координатам (0, 0), а мне надо по произвольным координатам.

Но тут по непонятной мне причине относительная точка поворота картинки смещена (не в центре).

Помогите пожалуйсто кто чем может.

Добавлено через 2 часа 24 минуты
Заметил еще одну вещь — при использовании этого метода

Поворот изображения (GPS)
Добрый день Пытаюсь сделать вот что, на canvas рисую изображение относительно своих координат.

поворот изображения мультитачем
Хочу поворачивать изображения, которые я вывожу на экран, на произвольный угол от 0 до 360 градусов.

Поворот изображения при снимке
Сетап такой: пользователи делают снимок в портретном режиме, и раньше достаточно было для.

Поворот bitmap(битмап) на определенный угол
Как собственно реализовать? Только нужно быстро не через SetPixel и GetPixel

Вращение холста можно сделать так:

Поворот bitmap вокруг своей оси DirectX 11
Учу DX11 по урокам rastertek, но там не описано как можно вращать созданные bitmap. Гуглом.

Вывод изображения на bitmap
Здравствуйте! Создаю скриншот экрана при помощи кода: bitm := TBitMap.Create; .

Загрузка изображения Bitmap
Здравствуйте. Можно ли загружать два и более изображения в один объект, или все таки под каждое.

Поворот изображения
Я знаю, что много раз эта тема уже поднималась и находил старые посты, но так и не смог в них.

Источник

Android: поворот изображения в imageview на угол

Я использую следующий код для поворота изображения в ImageView на угол. Существует ли какой-либо более простой и менее сложный метод.

18 ответов

еще один простой способ повернуть ImageView :
обновление:
Необходимый импорт:

Код: (Если imageView , angle , pivotX & pivotY уже определены)

этот метод не требует создания нового растрового изображения каждый раз.

примечание: для поворота ImageView on ontouch во время выполнения вы можете set onTouchListener on ImageView & повернуть его, добавив последний два строки (т. е. postRotate матрицу и установить его на imageView) в приведенном выше коде раздел в вашем сенсорном прослушивателе ACTION_MOVE часть.

mImageView.setRotation(angle) с API>=11

Читайте также:  Новинки tv box android

Если вы поддерживаете API 11 или выше, вы можете просто использовать следующий атрибут XML:

он может отображаться неправильно в Android Studio xml preview, но он работает так, как ожидалось.

есть два способа сделать это:

1, Используя Matrix для создания нового растрового изображения:

2 использовать RotateAnimation на View вы хотите повернуть, и убедитесь, что анимация для fillAfter=true , duration=0 и fromDegrees=toDgrees

и раздуть анимацию в коде:

Я знаю, что это безумно поздно, но это было полезно для меня, так что это может помочь другим.

начиная с API 11, вы можете установить абсолютное вращение ImageView программно с помощью imageView.setRotation(angleInDegrees); метод.

по абсолюту, я имею в виду, что вы можете неоднократно вызывать эту функцию без необходимости отслеживать текущее вращение. То есть, если я вращаюсь, проходя 15F до setRotation() метод, а затем вызвать setRotation() снова 30F , вращение изображения с 30 градусами, не 45 градусов.

Примечание: это действительно работает для любого подкласса посмотреть объект, а не только ImageView.

Это мой реализация RotatableImageView. Использование очень просто: Просто скопируйте attrs.в XML и RotatableImageView.java в ваш проект и добавьте RotatableImageView в свой макет. Задайте угол поворота с помощью пример:угол

попробуйте это на пользовательском представлении

вот хорошее решение для размещения повернутого drawable для imageView:

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

просто напишите это в своем onactivityResult

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

получение параметров imageView невозможно при инициализации активности Для этого, пожалуйста, обратитесь к этому решение или установите размеры на onClick кнопки как это

и код для запуска, когда мы хотим повернуть ImageView

этого решения достаточно для проблемы выше.Хотя он будет сжимать imageView, даже если это не необходимо(когда высота меньше ширины).Если это вас беспокоит, вы можете добавить еще один тернарный оператор внутри scaleX/scaleY.

Я думаю, что лучший способ 🙂

к сожалению, я не думаю, что есть. The Matrix класс отвечает за все манипуляции с изображениями, будь то вращение, сжатие/рост, перекос и т. д.

мои извинения, но я не могу придумать альтернативу. Может быть, кто-то другой и смог бы, но когда мне приходилось манипулировать образом, я использовал матрицу.

другим возможным решением является создание собственного пользовательского представления изображения(скажем RotateableImageView extends ImageView ). и переопределите onDraw (), чтобы повернуть холст/растровые изображения перед повторным переходом на холст.Не забудьте восстановить холст.

Читайте также:  Сталкер кеш для андроид

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

Источник

Android: как повернуть растровое изображение в центральной точке

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

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

Вот код, с которым у меня проблемы:

Странная часть заключается в том, что не имеет значения, как я меняю значения в pre / postTranslate() и аргументы с плавающей запятой setRotation() . Может ли кто-нибудь помочь и подтолкнуть меня в правильном направлении? 🙂

Надеюсь, вам поможет следующая последовательность кода:

Если вы проверите следующий метод из

это объяснило бы, что он делает с вращением и переводом.

Отредактировано : оптимизированный код.

Чтобы получить Bitmap из ресурсов:

Я вернулся к этой проблеме сейчас, когда мы дорабатываем игру, и я просто подумал опубликовать то, что сработало для меня.

Это метод вращения Матрицы:

( this.getCenterX() в основном это позиция X растрового изображения + ширина растрового изображения / 2)

И метод рисования растрового изображения (вызываемый через RenderManager класс):

canvas.drawBitmap(this.bitmap, this.matrix, null);

Так что это довольно прямолинейно, но мне немного странно, что я не мог заставить его работать, setRotate а затем следовало postTranslate . Может кто знает, почему это не работает? Теперь все растровые изображения вращаются правильно, но не без незначительного снижения качества растровых изображений: /

Источник

Android: как повернуть растровое изображение по центральной точке

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

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

Вот код, с которым у меня возникают проблемы:

Странная часть, не имеет значения, как я изменяю значения в pre / postTranslate() и аргументы float в setRotation() . Может ли кто-нибудь помочь и подтолкнуть меня в правильном направлении? 🙂

Надеюсь, следующая последовательность кода поможет вам:

Если вы проверите следующий метод из

Это объясняет, что он делает с переводом и переводом.

Отредактировано : оптимизированный код.

Чтобы получить битмап из ресурсов:

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

Это метод поворота матрицы:

Читайте также:  Push notification android studio

( this.getCenterX() – это в основном растровое изображение X-позиция + ширина растровых изображений / 2)

И метод рисования растрового изображения (называемый классом RenderManager ):

canvas.drawBitmap(this.bitmap, this.matrix, null);

Так что это прямолинейно, но я считаю странным, что я не мог заставить его работать setRotate а затем postTranslate . Может быть, некоторые знают, почему это не работает? Теперь все растровые изображения вращаются должным образом, но не без какого-либо незначительного снижения качества растрового изображения: /

В любом случае, спасибо за вашу помощь!

Вы также можете повернуть ImageView с помощью функции RotateAnimation :

Вы можете использовать что-то вроде следующего:

Посмотрите на образец от Google под названием Lunar Lander, изображение корабля будет динамически повернуто.

Пример кода Lunar Lander

Я использовал эту конфигурацию и все еще имею проблему пикселизации:

Источник

Android: как повернуть растровое изображение по центральной точке

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

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

Вот код, с которым у меня возникают проблемы:

Странная часть, не имеет значения, как я изменяю значения внутри pre / postTranslate() и аргументы float в setRotation() . Может ли кто-нибудь помочь и подтолкнуть меня в правильном направлении?:)

ОТВЕТЫ

Ответ 1

Надеюсь, следующая последовательность кода поможет вам:

Если вы проверите следующий метод из

это объясняет, что он делает с переводом и переводом.

Ответ 2

Отредактированный: оптимизированный код.

Получить битмап из ресурсов:

Ответ 3

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

Это метод поворота матрицы:

( this.getCenterX() — это в основном растровое изображение X-позиция + ширина растровых изображений /2)

И метод рисования растрового изображения (вызываемый через RenderManager класс):

canvas.drawBitmap(this.bitmap, this.matrix, null);

Так что это prettey прямо вперед, но я считаю странным, что я не мог заставить его работать setRotate , а затем postTranslate . Может быть, некоторые знают, почему это не работает? Теперь все растровые изображения вращаются правильно, но это не лишено какого-либо незначительного снижения качества растрового изображения:/

В любом случае, спасибо за вашу помощь!

Ответ 4

Вы также можете повернуть ImageView с помощью RotateAnimation :

Ответ 5

Вы можете использовать что-то вроде следующего:

Ответ 6

Посмотрите на образец из Google под названием Lunar Lander, изображение корабля будет динамически повернуто.

Ответ 7

Я использовал эти конфигурации и все еще имею проблему пикселизации:

Источник

Оцените статью