![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 32
|
Доброго денечка!
Налетел на следующие вилы при повороте битмапы: 1 вариант var bitmapData:BitmapData = new BitmapData(1, 10, false, 0xff0000); var matrix:Matrix = new Matrix(); matrix.translate(-bitmapData.width/2, -bitmapData.height/2); matrix.rotate(Math.PI * .5); matrix.translate(bitmapData.height/2, bitmapData.width/2); var retval:BitmapData = new BitmapData(bitmapData.height, bitmapData.width, false, 0); retval.draw(bitmapData, matrix); итого: на входе вертикальная линия цвета 0xff0000, на выходе горизонтальная цвета 0xff0000 2 вариант все тоже самое только ... --------------- итого: на входе горизонтальная линия цвета 0xff0000, на выходе вертикальная цвета 0xbf0000 Если увеличить height во втором варианте хотя бы до 2 pix, то цвет до и после поворота остается неизменным. Есть ли выход избежать изменения цвета с сохранением width/height значений указанных в обоих вариантах? |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Есть - пройтись вручную по битмапдате, а не отрисовывать через draw.
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 32
|
как быть с матричной трансформацией?
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 32
|
i.o. Спасибо
![]() К сожалению этот способ поворачивает картинку только туда\сюда, т.е. 0° -> 90° -> 0° -> ... Интересно отчего через матрицу трансформаций и draw такие искажения выскочили. Последний раз редактировалось denver; 31.07.2011 в 19:13. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А Вы пробовали не сдвигать на полпикселя?
В любом случае при повороте НЕ на 90° цвет будет искажен. Но надо еще смутинг потестить.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 31.07.2011 в 19:39. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Wolsh прав, если не кратно 90°, то искажения в любом случае будут. Что мешает использовать "ручной" проход при повороте, кратном 90°, а при остальных - использовать draw?
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 32
|
поворот всегда кратен 90° и draw без сглаживания
почему тогда при width=1 height=10 искажений не возникает? в случае "ручного" поворота придется хранить и передавать требуемый угол поворота, что не очч хочется ![]() |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 32
|
матрице всегда строго задается угол в 90 градусов, и матрица не передается в метод поворота
реализовано это одним статическим методом класса private static const MATRIX:Matrix = new Matrix(); ... public static function rotate(data:BitmapData):BitmapData { MATRIX.identity(); MATRIX.translate(-data.width/2, -data.height/2); MATRIX.rotate(Math.PI * .5); MATRIX.translate(data.height/2, data.width/2); var retval:BitmapData = new BitmapData(data.height, data.width, false, 0); retval.draw(data, MATRIX); return retval; } |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|