Russian Qt Forum
Сентябрь 21, 2024, 14:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPixmap: сдвиг изображения  (Прочитано 4942 раз)
vanessa
Гость
« : Январь 31, 2010, 09:57 »

Мне нужно сдвинуть изображение, что в QPixmap на несколько пикселей в сторону при этом результат должен остатся в том-же обьекте.

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

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

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



Записан
SABROG
Гость
« Ответ #1 : Январь 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 (но это не решит проблемы).
« Последнее редактирование: Январь 31, 2010, 13:23 от SABROG » Записан
vanessa
Гость
« Ответ #2 : Январь 31, 2010, 13:18 »

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

Простейший вариант связка двух QPixmap'ов и QPainter. Т.е. создается временный QPixmap того же размера, который передается на QPainter. Дальше все трансформации производятся на нем. И в конце drawPixmap() с оригинальной картинкой.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 20.