Название: [Решено]Помогите разобраться с QTransform Отправлено: lighting от Март 02, 2013, 17:21 Всю задачу описывать не буду, т.к. длинно и к проблеме непосредственного отношения не имеет. Сформулирую кратко задачу так:
Имеется холст заданного размера, на нем размещено изображение, о котором нам известны его начальные координаты, а также его модификаторы (угол поворота и масштаб). По этим данным нужно создать QImage и правильно заполнить его. Казалось-бы задача решается просто (скорее всего так оно и есть): - создать QImage нужного размера - залить его фоновым цветом - в еще один QImage загрузить изображение - создать QTransform - вызвать translate, rotate, scale для этого QTransform - трансформированное изображение нарисовать используя drawImage на первом QImage - сохранить первый QImage в файл Однако на практике появляются проблемы, при повороте/масштабировании размеры второго QImage меняются и происходит смещение при выводе на drawImage которое видно в прикрепленном изображении. На первой и третьей картинке показан желаемый результат, на второй и четвертой - то что получается. Чувствую что задача эта решается как-то просто, но вторую неделю не могу найти это простое решение. Название: Re: Помогите разобраться с QTransform Отправлено: ltise от Март 02, 2013, 17:29 В QTransform есть прикольные методы:
QTransform::quadToQuad(const QPolygonF &one, const QPolygonF &two, QTransform &result); QTransform::quadToSquare(const QPolygonF &one, const QPolygonF &two, QTransform &result); Просто указываешь исходный полигон и требуемый полигон - результатом является требуемая матрица. Очень удобно. В полигонах должно быть строго 4 точки Название: Re: Помогите разобраться с QTransform Отправлено: Igors от Март 02, 2013, 17:42 Проще всего поворачивать и масштабировать картинку относительно ее центра, т.е. сначала translate(w/2, -h/2). Тогда центры новой и старой картинок будут соответствовать одной и той же исходной точке Остается только вписать новый в старый размер
Код
Название: Re: Помогите разобраться с QTransform Отправлено: lighting от Март 03, 2013, 10:21 Пока к сожалению нет возможности проверить, вечером доберусь до компа и попробую. Правда есть вопрос, не опечатка-ли зедсь:
сначала translate(w/2, -h/2). Тут действительно надо -h/2? bили всетаки плюс?Название: Re: Помогите разобраться с QTransform Отправлено: Igors от Март 03, 2013, 11:08 Тут действительно надо -h/2? bили всетаки плюс? Та может и плюс :) Обычно я об этом не задумываюсь - посмотрел, ага, не туда крутит, ну значит поменял минус на плюс. Ну и вообще - есть простые операции на плоскости, QTransform всего лишь их реализует. Поэтому лучше подучить геометрию, а не классы :) Название: Re: Помогите разобраться с QTransform Отправлено: lighting от Март 05, 2013, 10:07 Igors спасибо, помогло.
|