Я столкнулся с проблемой при передаче объекта Image (захваченного с помощью Point Grej FlyCapture2 SDK) в объект QImage. Я получаю указатель, связанный с данными изображения по функции:
virtual unsigned char* FlyCapture2::GetData ( )
и затем загрузка данных по:
QImage::QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
Форматы данных обоих объектов Image являются 8-битными одноцветными. Параметр BytesPerLine должен быть равен ширине изображения (я уже проверил его, сохранив FlyCapture2 :: Image в .bmp и затем загрузив его в QImage).
Считаете ли вы, что проблема заключается в приведении типа unsigned char * к uchar *?
У тебя есть другие идеи? Копирование изображения пиксель за пикселем происходит слишком медленно.
EDIT: я конвертирую изображение, захваченное FlyCapture, в FlyCapture2::PIXEL_FORMAT_RGB8
, для которого: R = G = B = 8 бит, в функции PGR::SnapShot()
. SnapShot () возвращает unsigned char
* const.
и вот часть моей функции отображения Qt:
unsigned char *const img = PGRSystem->SnapShot();
QImage Img(img, 1024, 768, QImage::Format_RGB888);
QGraphicsScene *Scene = new QGraphicsScene();
Scene->addPixmap(QPixmap::fromImage(Img));
ui.ImageView->setScene(Scene);
ui.ImageView->fitInView(ui.ImageView->itemAt(100,100));
delete [] Scene;
Я также пытался сохранить Img в файл, но затем получил необработанное исключение. Я пробовал другие пары форматов пикселей (FlyCapture2::PIXEL_FORMAT_RGB
- 24-битный RGB с QImage::RGB88
8 и FlyCapture2::PIXEL_FORMAT_RGBU32
с QImage::RGB32
)
Также стоит упомянуть, что используемый мной конструктор QImage не устанавливает colorTable (я получаю исключение при проверке, находится ли QImage в grayScale).
Мне нужно немного больше помощи, я думаю.