Как мне извлечь мето данные широту и долготу у файла-картинки? Сейчас, когда я обрабатываю не один файл, а несколько выдаёт ошибку: no match for call to '(const QString) (const QString&)'
filesLatitude.append(QMediaMetaData::GPSLatitude(Files.at(i)));
filesLongitude.append(QMediaMetaData::GPSLongitude(Files.at(i)));
Полная функция UploadPhotosVideo:
void MainWindow::UploadPhotosVideo(QString PhotosVideo) {
if(PhotosVideo == "Photos") {
Files = QFileDialog::getOpenFileNames(
this,
tr("Открыть файлы"),
"C://",
"Все файлы (*.*);;Файлы изображений (*.png *.jpg *.jpeg *.bmp)"
);
} else if(PhotosVideo == "Video") {
Files = QFileDialog::getOpenFileNames(
this,
tr("Открыть файлы"),
"C://",
"Все файлы (*.*);;Файлы видео (*.dv *.avi *.mpeg *.mov *.dvd *.flv *.mp4)"
);
}
Progress->show();
Progress->setMinimum(0);
Progress->setMaximum(Files.size()-1);
Tab->setEnabled(false);
QStringList filesName;
QStringList filesLatitude;
QStringList filesLongitude;
QString newDir = QString(QDir::currentPath()+"/%1_%2").arg(QString(QDate::currentDate().toString()).replace(" ","_")).arg(QString(QTime::currentTime().toString()).replace(":","_"));
QDir().mkdir(newDir);
for (int i=0; i<Files.size();i++) {
if(PhotosVideo == "Photos") {
qDebug()<<"+++"<<Files.at(i);
filesLatitude.append(QMediaMetaData::GPSLatitude(Files.at(i)));
filesLongitude.append(QMediaMetaData::GPSLongitude(Files.at(i)));
}
filesName.append(QFileInfo(Files.at(i)).fileName());
QFile::copy(Files.at(i),newDir+"/"+QFileInfo(Files.at(i)).fileName());
Progress->setValue(i);
msg_view->append("Файл:"+Files.at(i)+" СКОПИРОВАН В:"+newDir+"/"+QFileInfo(Files.at(i)).fileName());
}
Tab->setEnabled(true);
Progress->hide();
QDynamicButton *buttonUploadPhotos = (QDynamicButton*) sender();
QList<QLineEdit*> _ListLineEditPhotos = buttonUploadPhotos->getListLineEdit();
for (int i=0;i<_ListLineEditPhotos.count();i++)
_ListLineEditPhotos[i]->setText(filesName.join(","));
}
QMediaObject наследует QAudioDecoder, QCamera, QMediaPlayer и QRadioTuner. Таким образом, не представляется возможным использовать QMediaMetaData для существующих фотографий JPEG и поэтому я использовал следующий код. Подключил два файла exif.cpp, exif.h и переделав код следующим образом:
if(PhotosVideo == "Photos") {
QString pathFile = imagePathListCopy.at(i); //тут пишем ссылку на файл
QByteArray pathFileBA = pathFile.toLocal8Bit();
const char *pathFileChar = pathFileBA.data();
// Read the JPEG file into a buffer
FILE *fp = fopen(pathFileChar, "rb");
if (!fp) {
QMessageBox msgBox;
msgBox.setText("Не удается открыть файл.\n");
msgBox.exec();
qDebug()<<"Не удается открыть файл.\n"<<pathFileChar;
}
fseek(fp, 0, SEEK_END);
unsigned long fsize = ftell(fp);
rewind(fp);
unsigned char *buf = new unsigned char[fsize];
if (fread(buf, 1, fsize, fp) != fsize) {
QMessageBox msgBox;
msgBox.setText("Не удается прочитать файл.\n");
msgBox.exec();
//qDebug()<<"Не удается прочитать файл.\n";
delete[] buf;
}
fclose(fp);
// Parse EXIF
easyexif::EXIFInfo result;
int code = result.parseFrom(buf, fsize);
delete[] buf;
if (code) {
QMessageBox msgBox;
msgBox.setText(QString("Ошибка анализа EXIF: код %1 \n").arg(code));
msgBox.exec();
//qDebug()<<QString("Ошибка анализа EXIF: код %1 \n").arg(code);
}
qDebug()<<"GPS Latitude"<<result.GeoLocation.Latitude;
qDebug()<<"GPS Longitude"<<result.GeoLocation.Longitude;
filesLatitude.append(QString::number(result.GeoLocation.Latitude));
filesLongitude.append(QString::number(result.GeoLocation.Longitude));
}
получил широту и долготу из методанных JPEG.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть один небольшой вопросУ меня есть список с двумя полями данных (одно для буквы, а второе для числа)
В массиве А(N,M) строки, не содержащие четных элементов, расположить в порядке убывания сумм элементов
Вот такой вопрос, почему каждый раз ,то что я ввожу заменяется новыми введенными данными? Выводится на консоль только новая информация