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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание QPixmap из памяти  (Прочитано 6153 раз)
Crazy Sage
Гость
« : Октябрь 17, 2012, 18:21 »

Есть у меня прога получающая кадры с фотоаппарата и обрабатывающая их.
Раньше я сохранял изображения на диск, открывал, обрабатывал и снова сохранял.
Сейчас копирую изображение сразу в память, обрабатываю и сохраняю.
Передача с камеры не особо ускорилась, это понятно, там usb накладывает ограничения по скорости.
Но меня несколько удивляет, что для изображения в 6 мегабайт QPixmap::load() работает всего на 30% медленнее, чем QPixmap::loadFromData(). Это нормально?
И может есть способ использовать сразу QPixmap (ну или какой-нибудь другой класс для изображения) в качестве принимающего буфера для ускорения процесса?
С камеры идет jpeg, но высота и ширина заранее неизвестны (по крайней мере я не нашел как их получить).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Октябрь 17, 2012, 18:26 »

Для таких дел нужно использовать QImage.
Записан

Qt 5.11/4.8.7 (X11/Win)
Crazy Sage
Гость
« Ответ #2 : Октябрь 17, 2012, 18:48 »

При использовании операций loadFromData, transformed, scaledToWidth и save разницы между QPixmap и QImage в производительности замеры не показали.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 17, 2012, 19:34 »

При использовании операций loadFromData, transformed, scaledToWidth и save разницы между QPixmap и QImage в производительности замеры не показали.
Не верю.
Записан

Qt 5.11/4.8.7 (X11/Win)
Crazy Sage
Гость
« Ответ #4 : Октябрь 17, 2012, 20:02 »

Ну я даже полную пересборку сделал под такое дело, но нет. Что с QPixmap, что с QImage на создание объекта из QByteArray размером ~6мегабайт уходит ~0.7 сек, на сохранение этого изображения на диск ~1 сек, поворот и изменение размера вместе занимают на порядок меньше времени, поэтому их производительность я не сравнивал.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Октябрь 17, 2012, 20:10 »

Ну я даже полную пересборку сделал под такое дело, но нет. Что с QPixmap, что с QImage на создание объекта из QByteArray размером ~6мегабайт уходит ~0.7 сек, на сохранение этого изображения на диск ~1 сек, поворот и изменение размера вместе занимают на порядок меньше времени, поэтому их производительность я не сравнивал.
Ну сохранение = 1 сек выглядит реально учитывая что имедж нужно сжать. А вот создание = 0.7 сек - да  откуда? Выделение памяти и копирование - порядок ну никак не 0.7. Может нагружено чем-то еще?
Записан
Crazy Sage
Гость
« Ответ #6 : Октябрь 17, 2012, 20:16 »

Замер времени непосредственно перед, замер сразу после. Меня тоже удивляет, что так долго.
Вот код

Код:
EdsStreamRef stream = NULL;
//Функции получения информации о файле в фотоаппарате
EdsDirectoryItemInfo dirItemInfo;
EdsGetDirectoryItemInfo(directoryItem, & dirItemInfo);
QByteArray buf;
buf.resize(dirItemInfo.size);
//Создаем поток с буфером в QByteArray
EdsCreateMemoryStreamFromPointer(buf.data(),dirItemInfo.size, &stream);
//Копирование данных в буфер
EdsDownload( directoryItem, dirItemInfo.size, stream);
EdsDownloadComplete(directoryItem);
QImage pixmap;
//Замер времени 1
pixmap.loadFromData(buf);
//Замер времени 2
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Октябрь 17, 2012, 20:31 »

А, так это "распаковка" из исходного jpg (а не просто создание). Ну тогда разумное время. И это "не масштабируется" и не ускоряется.
Записан
Crazy Sage
Гость
« Ответ #8 : Октябрь 17, 2012, 20:32 »

Ок, именно это я и хотел узнать. Не ускоряется, значит не ускоряется Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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