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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QImage неправильные цвета.  (Прочитано 4241 раз)
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+, а именно розовый превращается в фиолетовый, голубой - в желтый.
Где ошибся?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Апрель 29, 2014, 17:03 »

Где ошибся?
RGB <-> BGR
Записан
RedDog
Гость
« Ответ #2 : Апрель 29, 2014, 20:51 »

RGB <-> BGR
Как средствами QImage это переделать? Поток поменять не смогу.
PS: попиксельно желательно тоже не преобразовывать (своими силами), т.к критична скорость.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Апрель 29, 2014, 21:00 »

RGB <-> BGR
Как средствами QImage это переделать? Поток поменять не смогу.
PS: попиксельно желательно тоже не преобразовывать (своими силами), т.к критична скорость.

http://qt-project.org/doc/qt-4.8/qimage.html#convertToFormat ?
Записан
RedDog
Гость
« Ответ #4 : Апрель 30, 2014, 08:37 »

Все оказалось немного прозаичнее:
QImage::rgbSwapped()
Однако для 25 кадров в сек многократные преобразования картинки не ускорят вывод фулл ХД видео для 4-20 камер одновременно.
Нельзя ли в конструкторе Qimage засвопить цвета?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Апрель 30, 2014, 08:49 »

Нельзя ли в конструкторе Qimage засвопить цвета?
А что это изменит? swap все равно будет происходить.

Код
C++ (Qt)
QImage img = QImage( (BYTE*)BufPointer, BufWidth, BufHeight, BufPitch, QImage::Format_RGB888 ).rgbSwapped();
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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