【问题标题】:How to save image using timestamp in qt [closed]如何在qt中使用时间戳保存图像[关闭]
【发布时间】:2014-02-26 12:57:27
【问题描述】:

我正在为 Windows PC 创建一个 GUI。我想在 PC 上存储一系列图像。图像的名称是相同的。但我想在它们后面加上时间戳。那么,如何在 Qt 中使用时间戳保存图像? 除此之外,图像应该像这个例子一样保存: 参考图像<.date.><.time.>jpg 其中日期和时间对应于图像在 Windows PC 上保存的日期和时间。我也尝试过以下方法

在这里,我通过单击按钮实现了这一点:-

    void MainWindow::on_generateImagePushButton_clicked()
    {
    QDate date = QDate::currentDate();
    QString dateString = date.toString();
    QString path = QString("E:\\QT1\\timeStampTrial\\goldenRefImg[%1].jpg").arg(dateString);
    qDebug()<<"path: "<<path;

    /*display current time*/
    QTime time = QTime::currentTime();
    QString timeString = time.toString();
    QString path2 = QString("E:\\QT1\\timeStampTrial\\goldenRefImg[%1 %2].jpg").arg(dateString).arg(timeString);
    qDebug()<<"path2: "<<path2;

    /*converting from QString to char* */
    QByteArray bA = path2.toLocal8Bit();
    const char *c_charArray = bA.data();


    /*saving image*/
    IplImage *imgWithTimeStamp = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
    cvSaveImage(c_charArray, imgWithTimeStamp);

    }

图像使用 dateStamp 保存,例如。 GoldenRefImg[Wed Feb 5 2014].jpg 当我使用字符串路径时。但是当我使用 string-path2 时,它不会像我期望的那样保存 dateStamp 和 timeStamp,即 goldenRefImg[Wed Feb 5 2014 10:47:32].jpg 但是显示 path 和 path2 的 qDebug 语句正确显示。 应用程序输出:

Starting E:\QT1\timepass-build-desktop-Qt_4_8_1_for_Desktop_-_MSVC2010__Qt_SDK__Debug\debug\timepass.exe...
path:  "E:\QT1\timeStampTrial\goldenRefImg[Wed Feb 5 2014].jpg" 
path2:  "E:\QT1\timeStampTrial\goldenRefImg[Wed Feb 5 2014 10:47:23].jpg" 

现在我刚刚回忆起无法使用特殊字符(例如冒号)保存图像:时间戳中的冒号。可以更改时间格式吗? 我试过这样:

path2.replace(":","-");

但是 E:\ 也被转换为 E-。请指导。谢谢你。

【问题讨论】:

  • Qt,不是 QT。您应该显示代码示例,并更准确地描述问题。
  • 另外,@DmitrySazonov,你能告诉我我哪里不够清楚吗?那么,我将相应地进行修改。谢谢。
  • 阅读有关 sprintf 参数的文档。它不接受 Qt 类型。这种“技巧”可以通过以下方式完成:QString path = QString( "E:\\Somdir\\..\\refImg[%1].jpg" ).arg( dateString );。我建议您阅读一些有关 C/C++ 的基础书籍以避免此类问题。并学习如何进行逐步调试。

标签: qt timestamp save-image datestamp


【解决方案1】:
const QDateTime now = QDateTime::currentDateTime();
const QString timestamp = now.toString(QLatin1String("yyyyMMdd-hhmmsszzz"));
const QString filename = QString::fromLatin1("/some/path/someimage-%1.jpg").arg(timestamp);

这需要当前日期/时间,使用QDateTime::toString() 将其转换为字符串(文档列出了格式化选项)并从中构造文件名。 然后只需将filenameQImage::save()QImageWriter 一起使用。

【讨论】:

  • 谢谢@Frank,我收到关于 QStringLiteral 的错误——它没有在范围内声明。我已包含 Qstring 标头,但无济于事。我尝试用 QString 本身替换 QStringLiteral,(如果我做错了方法,请原谅我,我是新手),然后我收到以下错误:QString::arg: Argument missing: .jpg, 20140203-1521120 can u帮忙?
  • 正如你所说,我使用 QImage 保存。 QImage *image = new QImage();图像->保存(文件名);我希望这是保存图像的正确方法?
  • QStringLiteral 是 Qt 5 中的新功能,我将对其进行调整以使其适用于 Qt 4。您的代码创建一个空图像(您应该在堆栈上创建,而不是在堆上创建)然后保存那 - 所以里面不会有任何东西。所以你需要先获取你的图片才能保存。
  • 哦,那太好了。来保存部分,而不是文件名,我插入了一个字符串-
  • 至于参数,您需要将“%1”添加到您的字符串中,在您期望时间戳的位置。
【解决方案2】:
    /*display current date*/
    QDate date = QDate::currentDate();
    QString dateString = date.toString();
    QString path = QString("E:\\QT1\\timeStampTrial\\goldenRefImg[%1].jpg").arg(dateString);
    qDebug()<<"path: "<<path;

    /*display current time*/
    QTime time = QTime::currentTime();
    QString timeString = time.toString();
    QString path2 = QString("E:\\QT1\\timeStampTrial\\goldenRefImg[%1 %2].jpg").arg(dateString).arg(timeString);
    qDebug()<<"path2: "<<path2;

    path2.replace(":","-");
    path2.replace(1,1,":");
    QByteArray bA = path2.toLocal8Bit();
    const char *c_charArray = bA.data();
    IplImage *imgWithTimeStamp = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
    cvSaveImage(c_charArray, imgWithTimeStamp);

感谢@Dmitri Sazonov 和@Frank Osterfeld 提出的所有建议

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多