Почему QCameraImageCapture сохраняет изображение на жесткий диск?
Часть написанного мною приложения позволяет снимать изображения с веб-камеры. Я использую QCamera с QCameraViewfinder для отображения текущего вида, а затем, когда нажимается кнопка спуска затвора, он снимает изображение с QCameraImageCapture, установленным для захвата в буфер, а затем обрабатывает его оттуда. Я только что обнаружил, что он также сохраняет копию изображения в локальной папке изображений. Почему это происходит, и как я могу это остановить?
2 ответа
Это всего лишь моя точка зрения:
На основании документации, после звонка capture
независимо от места назначения (я имею в виду CaptureToFile
или же CaptureToBuffer
) изображение сохраняется в файл.
обратите внимание на этот параметр состояния в приведенной ниже ссылке: если передан пустой файл, серверная часть камеры выбирает местоположение и схему именования фотографий в системе по умолчанию.
http://doc.qt.io/qt-5/qcameraimagecapture.html
Дополнительное преимущество с "CaptureToBuffer", ваше изображение сохраняется в некотором указанном формате буфера.
Мое дикое предположение, что если они вообще не поддерживают (так как я не могу найти никакой официальной информации о нем) только захват в буфер, причина может быть,
пользователь может установить формат буфера, используя setBufferFormat
, И устройство может не поддерживать формат буфера (isCaptureDestinationSupported() там, чтобы проверить это.). Может быть из-за этого они всегда сохраняют в локальную папку с изображениями.
Если это сохранение неизбежно capture
и если вашей компании строго не нужно сохранять эти сохраненные файлы, когда ваш буфер работает хорошо, возможно, вы можете удалить их в слоте ниже.
QObject::connect(YOURCAMERACAPTUREOBJECT, SIGNAL(imageSaved), this,SLOT(saved(int id, const QString &fileName)));
void saved(int id, const QString &fileName)
{
//Delete the file by checking you have content in buffer.
//to check the buffer probably you can use "imageAvailable" signal
}
Я считаю, что ошибка, которую вы описываете, была в плагине GStreamer camerabin. Когда вы смотрите на https://code.qt.io/cgit/qt/qtmultimedia.git/tree/src/plugins/gstreamer/camerabin/camerabinsession.cpp?h=5.15#n587 , m_imageFileName настраивается независимо от места назначения захвата. Файл сохраняется этим фильтром, затем https://code.qt.io/cgit/qt/qtmultimedia.git/tree/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp?h=5.15#n404
edit: эта ошибка, похоже, каким-то образом исправлена в Qt 5.15.