Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Urvin от Август 25, 2009, 23:45



Название: QPainter, поворот изображения
Отправлено: Urvin от Август 25, 2009, 23:45
Есть необходимость поверх одного изображения вывести другое, под углом.
Disclaimer: форум курил, но нужного не нашел =(

Текущая реализация такая:
Код
C++ (Qt)
painter.setRenderHint(QPainter::Antialiasing,true);
painter.save();
painter.translate(578,208);
painter.rotate(angletmp);
painter.drawPixmap(0,-18,QPixmap(":/img/arrow.png"));
painter.restore();

Меня не устраивают зазубрины на полученном изображении:
(http://funkyimg.com/u2/585/029/baaad_pixels.png)
Слева то, что я получаю, а справа - что хотелось бы получить.

Возможно ли справиться с зазубринами, используя только инструменты QPainter, без OpenGL и пр.?


Название: Re: QPainter, поворот изображения
Отправлено: Rcus от Август 26, 2009, 03:44
По-умолчанию при рисовании QPainter использует быстрый алгоритм трансформаций, качественный включает отдельным хинтом. А именно такую штуку довольно просто нарисовать при помощи QPainterPath :) (нет не совсем просто, но ничего невозможного нет)


Название: Re: QPainter, поворот изображения
Отправлено: _govorilka от Август 26, 2009, 05:30
Попробуй выставить вот этот флаг QPainter::SmoothPixmapTransform

В примерах посмотри demos/affine/. Я думаю, это то, что тебе надо.


Название: Re: QPainter, поворот изображения
Отправлено: Urvin от Август 26, 2009, 11:37
Попробуй выставить вот этот флаг QPainter::SmoothPixmapTransform

В примерах посмотри demos/affine/. Я думаю, это то, что тебе надо.

Спасибо! Действительно, то, что надо!


По-умолчанию при рисовании QPainter использует быстрый алгоритм трансформаций, качественный включает отдельным хинтом. А именно такую штуку довольно просто нарисовать при помощи QPainterPath :) (нет не совсем просто, но ничего невозможного нет)
Можно и через пиксели высчитывать, вот только это еще не окончательный вид рисунка. Не надо через QPainterPath  ::)