【问题标题】:Why is QCameraImageCapture saving an image to the hard drive?为什么 QCameraImageCapture 将图像保存到硬盘?
【发布时间】:2017-08-24 17:25:43
【问题描述】:

我编写的应用程序的一部分能够从网络摄像头捕获图片。我正在使用带有 QCameraViewfinder 的 QCamera 来显示当前视图,然后当单击快门按钮时,它会拍摄一张带有 QCameraImageCapture 设置为捕获到缓冲区的图片,然后从那里处理它。我刚刚发现它还在本地图片文件夹中保存了图像的副本。为什么会发生这种情况,我该如何阻止它?

【问题讨论】:

  • 很抱歉加入晚了,但我今天只是在处理这个问题。我没有找到任何干净的方法,但我注意到给 QImageCapture::capture() 一个不存在的路径的文件名和路径,似乎什么也没发生。显然,它不会创建目录并且文件打开失败。不是最快乐的选择,但可以防止大量图像堆积。我尝试的另一件事是每次都写相同的文件名。然后只有一个图像需要清理。

标签: qt pyqt qcamera


【解决方案1】:

这只是我的观察点:

根据文档,在您调用capture 后,无论目标位置(我的意思是CaptureToFileCaptureToBuffer),图像都会保存到文件中。

请注意以下链接中的此声明如果传递的是空文件,则相机后端会为系统上的照片选择默认位置和命名方案。

http://doc.qt.io/qt-5/qcameraimagecapture.html#capture

“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

}

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多