2014-02-03 4 views
-1

Я создаю графический интерфейс для ПК с ОС Windows. Я хочу сохранить серию изображений на ПК. Название изображений идентично. Но я хочу добавить их с отметками времени. Итак, как сохранить изображение с помощью timestamp в Qt? в дополнение к этому, изображения изгоняются быть сохранены что-то вроде этого примера:. referenceImage < .date> < .time> JPG где дата и время соответствуют дате и времени на, при котором изображение было сохранено на. Windows PC. Я попытался слишкомКак сохранить изображение с помощью timestamp в qt

Здесь я реализовал это в нажатии кнопки следующего: -

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 Но операторы qDebug, показывающие путь и путь2, отображаются правильно. Выход Применение:

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" 

Теперь я только вспомнила, что изображение не может быть сохранен с помощью специальных символов, таких как толстой кишки: какие там в TIMESTAMP. Можно ли изменить формат времени? Я попробовал этот путь:

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

Но E: \ также преобразуется в E-.Please руководства. Спасибо.

+0

Qt не QT. Вы должны показать образец кода и более подробно описать проблему. –

+0

Кроме того, @DmitrySazonov, может и сказать, где я был недостаточно ясен? то, соответственно, буду исправлять. Спасибо. –

+0

Прочитайте документацию о аргументах sprintf. Он не принимает типы Qt. Такой «трюк» может быть выполнен следующим образом: «QString path = QString (« E: \\ Somdir \\ .. \\ refImg [% 1] .jpg ») .arg (dateString);'. Я рекомендую вам прочитать некоторые базовые книги о C/C++, чтобы избежать таких вопросов. И узнайте, как делать пошаговую отладку. –

ответ

1
/*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 Сазонов и @Frank Osterfeld

5
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() (документация перечислены параметры форматирования) и создает имя файла из него. Затем просто используйте filename с QImage::save() или QImageWriter.

+0

Спасибо @ Фрэнк, я получаю ошибку о QStringLiteral - что он не был объявлен в области видимости. Я включил заголовок Qstring, но безрезультатно. Я попытался заменить QStringLiteral самой QString (простить меня, если я ошибаюсь, я новичок), затем я получаю следующую ошибку: QString :: arg: Аргумент отсутствует: <имя_каталога/image_name> .jpg, 20140203-1521120 может помочь? –

+0

как я сказал, я сохранил с помощью QImage. QImage * image = new QImage(); image-> save (filename); это правильный способ сохранить изображение, надеюсь? –

+0

QStringLiteral является новым в Qt 5, я адаптирую его, чтобы он работал для Qt 4. Ваш код создает пустое изображение (которое вы должны создать в стеке, а не в куче), а затем сохраняет это - так что не будет быть чем-нибудь в нем. Поэтому сначала вы должны получить свое изображение, прежде чем сможете его сохранить. –

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

  • Нет связанных вопросов^_^