Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: fuCtor от Июль 04, 2009, 15:12



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


Название: Re: Копирование фрагмента изображения
Отправлено: Rcus от Июль 04, 2009, 15:26
QImage::copy/QPixmap::copy для прямоугольных фрагментов, иначе все-таки нужно использовать QPainter с setClipping


Название: Re: Копирование фрагмента изображения
Отправлено: fuCtor от Июль 04, 2009, 16:19
(http://s3.amazonaws.com/floomby/7_4_2009/1b9rZCPBbE2lY0jSR1jaA.jpg)
Вот примерно так надо сдвигать картинку.

Делал так:
Код
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 когда использовал, то ругался он что только один одновременно может использоваться.


Название: Re: Копирование фрагмента изображения
Отправлено: Rcus от Июль 04, 2009, 16:29
Этот код выглядит настолько неправильно что я даже не знаю что ответить. Надо вернуться к постановке: что вы имеете ввиду под буфером? И подробное описание задачи впрочем тоже не помешает


Название: Re: Копирование фрагмента изображения
Отправлено: fuCtor от Июль 04, 2009, 17:02
Есть некоторые данные, которые отрисовываются в QImage (буфер) и потом выводятся на QWidget. При нажатии кнопки нужно сдвинуть изображение и отрисовать те фрагменты которых ранее не было видно, чтоб не перериовывать полностью все изображение.
Вот тут и возникает задача сдвига, создавать QPainter и двигать им, или еще какие-либо методы.

Отрисовка в буфер (рендер) и собственно вывод ничем кроме буфера не связаны.


Название: Re: Копирование фрагмента изображения
Отправлено: fuCtor от Июль 04, 2009, 17:42
Решил, через QPainter.


Название: Re: Копирование фрагмента изображения
Отправлено: fuCtor от Февраль 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));
 
Как вариант использовать платформо зависимый код, но крайне не хочется.


Название: Re: Копирование фрагмента изображения
Отправлено: Kolobok от Февраль 12, 2010, 22:44
QPainter::translate
QPainter::setTransform


Название: Re: Копирование фрагмента изображения
Отправлено: fuCtor от Февраль 13, 2010, 10:39
QPainter::translate
QPainter::setTransform

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