Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: RedDog от Апрель 29, 2014, 16:50



Название: QImage неправильные цвета.
Отправлено: RedDog от Апрель 29, 2014, 16:50
Имеется некое SDK, которое возвращает буфер с картинкой:

Код:
void* BufPointer;
DWORD BufWidth, BufHeight, BufPitch;
BITMAPINFO BmpInfo;
m_NewPicDecompBuffer->GetBufPointer(BufPointer, BufWidth, BufHeight, BufPitch);
m_NewPicDecompBuffer->GetBitmapInfoHdr(BmpInfo.bmiHeader);
Если рисовать картинку через виндовое GDI+, то цвета нормальные отображаются:
Код:
Bitmap MemBmp(BufWidth, BufHeight, BufPitch, PixelFormat24bppRGB, (BYTE*)BufPointer);
MemBmp.RotateFlip(RotateNoneFlipY);
Graphics graphics(pDC->m_hDC);
graphics.DrawImage((Image*)&MemBmp, m_ViewerRect.left, m_ViewerRect.top);
Средствами QImage пытаюсь проделать тоже самое:
Код:
QImage img( (BYTE*)BufPointer, BufWidth, BufHeight, BufPitch, QImage::Format_RGB888 );
img = img.mirrored( false, true );
QPainter painter( this );
painter.drawImage( 0, 0, img.scaled( this->size() ) );
Однако цвета не совпадают с GDI+, а именно розовый превращается в фиолетовый, голубой - в желтый.
Где ошибся?


Название: Re: QImage неправильные цвета.
Отправлено: Old от Апрель 29, 2014, 17:03
Где ошибся?
RGB <-> BGR


Название: Re: QImage неправильные цвета.
Отправлено: RedDog от Апрель 29, 2014, 20:51
RGB <-> BGR
Как средствами QImage это переделать? Поток поменять не смогу.
PS: попиксельно желательно тоже не преобразовывать (своими силами), т.к критична скорость.


Название: Re: QImage неправильные цвета.
Отправлено: Alex Custov от Апрель 29, 2014, 21:00
RGB <-> BGR
Как средствами QImage это переделать? Поток поменять не смогу.
PS: попиксельно желательно тоже не преобразовывать (своими силами), т.к критична скорость.

http://qt-project.org/doc/qt-4.8/qimage.html#convertToFormat ?


Название: Re: QImage неправильные цвета.
Отправлено: RedDog от Апрель 30, 2014, 08:37
Все оказалось немного прозаичнее:
QImage::rgbSwapped()
Однако для 25 кадров в сек многократные преобразования картинки не ускорят вывод фулл ХД видео для 4-20 камер одновременно.
Нельзя ли в конструкторе Qimage засвопить цвета?


Название: Re: QImage неправильные цвета.
Отправлено: Old от Апрель 30, 2014, 08:49
Нельзя ли в конструкторе Qimage засвопить цвета?
А что это изменит? swap все равно будет происходить.

Код
C++ (Qt)
QImage img = QImage( (BYTE*)BufPointer, BufWidth, BufHeight, BufPitch, QImage::Format_RGB888 ).rgbSwapped();