Russian Qt Forum

Qt => Мультимедиа => Тема начата: vanessa от Январь 31, 2010, 09:57



Название: QPixmap: сдвиг изображения
Отправлено: vanessa от Январь 31, 2010, 09:57
Мне нужно сдвинуть изображение, что в QPixmap на несколько пикселей в сторону при этом результат должен остатся в том-же обьекте.

пробовал так.
Код:
QPixmap pix(400,300);
// здесь что-то рисуется на этом pix

QMatrix mat;
mat.translate(50,0);
pix=pix.transformed(mat); // если я правильно понял то это как-раз и должно сдвинуть изображение
// но оно не сдвигается

Есть ли какие методы его сдвига? или можно ли сделать так: слева, напримар отрезать полоску шириной в несколько пикселей а справа добавить столько-же ?





Название: Re: QPixmap: сдвиг изображения
Отправлено: SABROG от Январь 31, 2010, 13:13
Если операция translated() выходит за пределы картинки, то она не производится. "Умное" Qt пытается сделать adjust для картинки (что-то типа волшебной палочки выделения в фотошопе), поэтому если картинка целиком должна быть трансформирована и результат этой трансформации больше размера картинки, то ничего не делается. Метод QPixmap::trueMatrix() возвратит матрицу, где все твои изменения (сдвиг по горизонтали на 50) сброшены в 0:

Код:
QMatrix(11=1 12=0 21=0 22=1 dx=50 dy=0) // до
QMatrix(11=1 12=0 21=0 22=1 dx=0 dy=0) // после

Примечательно то, что метод rotate() по каким-то причинам этим не страдает, увеличивает картинку до новых размеров, если она не умещается.

P.S.: QMatrix больше не поддерживается, вместо него нужно использовать QTransform (но это не решит проблемы).


Название: Re: QPixmap: сдвиг изображения
Отправлено: vanessa от Январь 31, 2010, 13:18
А другие варианты как такое сделать есть ? У него ведь есть связанные не-члены
QDataStream & operator<< ( QDataStream & stream, const QPixmap & pixmap )
QDataStream & operator>>( QDataStream & stream, const QPixmap & pixmap )
может с помощью их можно как-то перегруппировать данные внутри піксмапа чтоб получить нужный мне результат ?


Название: Re: QPixmap: сдвиг изображения
Отправлено: SABROG от Январь 31, 2010, 13:26
Простейший вариант связка двух QPixmap'ов и QPainter. Т.е. создается временный QPixmap того же размера, который передается на QPainter. Дальше все трансформации производятся на нем. И в конце drawPixmap() с оригинальной картинкой.