Самый быстрый способ показать растровое изображение char * на QLabel - PullRequest
0 голосов
/ 08 февраля 2012

Я разрабатываю приложение для обработки изображений, которое получает данные изображения из драйвера IDS uEye в виде необработанного буфера char*. Мне нужно показать это изображение пользователю. (Насколько я понимаю, Qt, класс QLabel должен использоваться для этой цели). Я также должен проиллюстрировать алгоритм обработки изображений, который я считаю наиболее быстрым, непосредственно изменяя буфер char*.

Я видел немало примеров кода с таким подходом:

label.setPixmap(QPixmap::fromImage(image));

, где image - это QImage, построенный из буфера char*.

Однако я нашел этот код в исходном коде демо-приложения uEye:

void PaintLabel::paintEvent(QPaintEvent *ev)
{
  //...
  QPainter painter(this);
  painter.drawImage(rectangle, image);
  painter.end();
}

, где PaintLabel - это подкласс QLabel, а rectangle - это QRectF, показывающий, где следует рисовать image.

Я провел некоторые измерения времени, и оказалось, что второй подход примерно в 1,8 раза быстрее (примерно 9 мс против 16 мс).

Итак, мой вопрос: есть ли другой способ показать char* растровое изображение еще быстрее - как можно быстрее? Обратите внимание, что это всего лишь один и тот же буфер, меняется только его содержимое; поэтому нет необходимости реконструировать все с нуля для каждого кадра - просто обновить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...