Я разрабатываю приложение для обработки изображений, которое получает данные изображения из драйвера 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*
растровое изображение еще быстрее - как можно быстрее? Обратите внимание, что это всего лишь один и тот же буфер, меняется только его содержимое; поэтому нет необходимости реконструировать все с нуля для каждого кадра - просто обновить.