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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Копирование фрагмента изображения  (Прочитано 5505 раз)
fuCtor
Гость
« : Июль 04, 2009, 15:12 »

Необходимо скопировать фрагмент ранее отрисованного изображения (буфера)  в новое изображение при этом со смещение. Можно ли это сделать не используя QPainter? А то в информации по QImage не нашел чтото нужных методов.
Записан
Rcus
Гость
« Ответ #1 : Июль 04, 2009, 15:26 »

QImage::copy/QPixmap::copy для прямоугольных фрагментов, иначе все-таки нужно использовать QPainter с setClipping
Записан
fuCtor
Гость
« Ответ #2 : Июль 04, 2009, 16:19 »


Вот примерно так надо сдвигать картинку.

Делал так:
Код
C++ (Qt)
dcx = (cx < 0)?(view_rect_.width() - cx):view_rect_.width();
dcy = (cy < 0)?(view_rect_.height() - cy):view_rect_.height();
QImage * image = (QImage *) render_->context.device_context;
*image = image->copy((cx >= 0)?cx:0, (cy >= 0)?cy:0, dcx, dcy);
 

Все равно не получалось. А QPainter когда использовал, то ругался он что только один одновременно может использоваться.
Записан
Rcus
Гость
« Ответ #3 : Июль 04, 2009, 16:29 »

Этот код выглядит настолько неправильно что я даже не знаю что ответить. Надо вернуться к постановке: что вы имеете ввиду под буфером? И подробное описание задачи впрочем тоже не помешает
Записан
fuCtor
Гость
« Ответ #4 : Июль 04, 2009, 17:02 »

Есть некоторые данные, которые отрисовываются в QImage (буфер) и потом выводятся на QWidget. При нажатии кнопки нужно сдвинуть изображение и отрисовать те фрагменты которых ранее не было видно, чтоб не перериовывать полностью все изображение.
Вот тут и возникает задача сдвига, создавать QPainter и двигать им, или еще какие-либо методы.

Отрисовка в буфер (рендер) и собственно вывод ничем кроме буфера не связаны.
Записан
fuCtor
Гость
« Ответ #5 : Июль 04, 2009, 17:42 »

Решил, через QPainter.
Записан
fuCtor
Гость
« Ответ #6 : Февраль 12, 2010, 13:24 »

Возвращаясь к старому вопросу, можно ли избежать вот таких конструкций, для сдвига изображения на CX и CY:
Код
C++ (Qt)
painter_.begin(imageBuffer_);
 
painter_.drawImage((cx >= 0)?cx:0, (cy >= 0)?cy:0,
imageBuffer_->copy(abs((cx < 0)?cx:0), abs((cy < 0)?cy:0), dcx, dcy));
 
Как вариант использовать платформо зависимый код, но крайне не хочется.
Записан
Kolobok
Гость
« Ответ #7 : Февраль 12, 2010, 22:44 »

QPainter::translate
QPainter::setTransform
Записан
fuCtor
Гость
« Ответ #8 : Февраль 13, 2010, 10:39 »

QPainter::translate
QPainter::setTransform

Малость уточню вопрос: как с меньшими накладными расходами сдвинуть фрагмент изображения. Сейчас получаю копию фрагмента изображения и отрисовываю сам на себя. Этот процесс в среднем занимает 5 -11 мс в зависимости от размера копируемого фрагмента, что довольно накладно.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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