2016-10-03 1 views
0

Я работаю над приложением для обработки изображений и я использую этот кодУдалить захваченное изображение в imageCapture из QML Camera

Camera { 
    id: cam 
    viewfinder.resolution: "640x480" 
    viewfinder.minimumFrameRate: 5 
    captureMode: Camera.CaptureStillImage 
    imageCapture { 
     resolution: "640x480" 
     onReadyChanged: { 
      imageDecoder.reset() // my decoder class 
      cam.imageCapture.capture() 
     } 
     onImageCaptured: { 
      console.log(requestId, preview) 
      imageDecoder.decodeQmlPreview(preview) 
     } 
    } 
    imageProcessing { 
     contrast: 0.60 
    } 
} 


VideoOutput { 
    id: output 
    fillMode: VideoOutput.PreserveAspectCrop 
    anchors.fill: parent 
    source: cam   
} 

Я вижу, что все эти захваченные изображения (preview) сохраняются на жестком диске и никогда не удаляется. Как удалить эти изображения? У меня очень ограниченное место на жестком диске.

# ls -lh | grep IMG 
-rw-r--r-- 1 root  root  10.5K Jan 1 00:40 IMG_00000001.jpg 
-rw-r--r-- 1 root  root  12.2K Jan 1 00:45 IMG_00000002.jpg 
-rw-r--r-- 1 root  root  15.6K Jan 1 00:48 IMG_00000003.jpg 
-rw-r--r-- 1 root  root  15.6K Jan 1 00:49 IMG_00000004.jpg 
-rw-r--r-- 1 root  root  11.4K Jan 1 01:05 IMG_00000005.jpg 
+0

Вы абсолютно уверены, что это исходит из вашего qml? Как вы это изолировали? \ –

+0

@KubaOber они соответствуют отображению видеовыхода. Я удалил все эти файлы и повторно запустил приложение. Счетчик файлов соответствует моему количеству обработанных изображений. – ramtheconqueror

+0

Я бы подумал, что это ошибка Qt, если код, который вы показываете, завершен. Если да, напишите отчет об ошибке. –

ответ

1

QML имеет довольно неявное отношение к FS - его внутренняя функциональность будет читать и писать иногда, но это, кажется, не имеет определенного API для пользователя, чтобы взаимодействовать непосредственно с ФС.

Это означает, что вам нужно будет реализовать эту функциональность на C++ и выставить ее в QML.

Моя практика заключается в создании class System : public QObject и положить все необходимые вещи внутри, а затем в main.cpp:

System s(&engine); 
    engine.rootContext()->setContextProperty("Sys", &s); 

Тогда из QML вы можете просто Sys.doYourStuff(). В вашем случае вам нужна статическая функция bool QFile::remove(const QString &fileName).

+0

Спасибо, как найти фактическое имя файла на FS из 'QUrl' aka' preview'? – ramtheconqueror

+0

Схема именования является единой, поэтому вы можете просто пойти туда и удалить изображение, созданное при каждом просмотре. Изучите, как поведение именования работает как файлы, удаляются. Возможно, вам придется поместить счетчик в свой QML-код, чтобы отслеживать, какой файл вы должны удалить. – dtech

Смежные вопросы