From 9f9020baf8e37f072779301ef48de925af48cb9c Mon Sep 17 00:00:00 2001 From: birkeh Date: Wed, 13 Feb 2019 22:12:14 +0100 Subject: [PATCH] initial commit --- cexif.cpp | 57 +++++++++++++++++++++++++++++++++++++++++---- cpicture.cpp | 20 +++++++++++++--- cpicture.h | 14 +++++++++++ cpicturelibrary.cpp | 2 ++ ctoolboxinfo.cpp | 3 ++- 5 files changed, 87 insertions(+), 9 deletions(-) diff --git a/cexif.cpp b/cexif.cpp index 90c26ed..8f9a294 100644 --- a/cexif.cpp +++ b/cexif.cpp @@ -61,6 +61,29 @@ bool cEXIF::fromFile(const QString& szFileName) Exiv2::PreviewImage previewImage = previewManager.getPreviewImage(*i); QImage image; image.loadFromData(static_cast(previewImage.pData()), static_cast(previewImage.size())); + + QTransform rotation; + int angle = 0; + + switch(imageOrientation()) + { + case 8: + angle = 270; + break; + case 3: + angle = 180; + break; + case 6: + angle = 90; + break; + } + + if(angle != 0) + { + rotation.rotate(angle); + image = image.transformed(rotation); + } + m_previewList.append(image); } @@ -68,7 +91,31 @@ bool cEXIF::fromFile(const QString& szFileName) { QImage image; if(image.load(szFileName)) - m_thumbnail = image.scaled(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); + { + QTransform rotation; + int angle = 0; + + switch(imageOrientation()) + { + case 8: + angle = 270; + break; + case 3: + angle = 180; + break; + case 6: + angle = 90; + break; + } + + if(angle != 0) + { + rotation.rotate(angle); + image = image.transformed(rotation); + } + + m_thumbnail = image.scaled(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } } else { @@ -109,7 +156,7 @@ bool cEXIF::fromFile(const QString& szFileName) } if(index != -1) - m_thumbnail = m_previewList[index].scaled(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); + m_thumbnail = m_previewList[index].scaled(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, Qt::KeepAspectRatio, Qt::SmoothTransformation); } return(true); @@ -130,10 +177,10 @@ qint32 cEXIF::imageHeight() return(getTag(0x0101, 1).value()); } -//0x0112 + qint16 cEXIF::imageOrientation() -{bla - return(getTag(0x0112, 1).value()); +{ + return(getTag(0x0112, 1).value()); } QString cEXIF::cameraMake() diff --git a/cpicture.cpp b/cpicture.cpp index 2500e64..e1ba1c0 100644 --- a/cpicture.cpp +++ b/cpicture.cpp @@ -50,6 +50,7 @@ bool cPicture::fromFile(const QString& szFileName) m_thumbnail = exif.thumbnail(); m_imageWidth = exif.imageWidth(); m_imageHeight = exif.imageHeight(); + m_imageOrientation = exif.imageOrientation(); m_cameraMake = exif.cameraMake(); m_cameraModel = exif.cameraModel(); m_dateTime = exif.dateTime(); @@ -92,12 +93,12 @@ bool cPicture::toDB() } if(!query.next()) - query.prepare("INSERT INTO picture (fileName, filePath, fileSize, imageWidth, imageHeight, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :filePath, :fileSize, :imageWidth, :imageHeight, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);"); + query.prepare("INSERT INTO picture (fileName, filePath, fileSize, imageWidth, imageHeight, imageOrientation, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :filePath, :fileSize, :imageWidth, :imageHeight, :imageOrientation, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);"); else - query.prepare("UPDATE picture SET fileName=:fileName, filePath=:filePath, fileSize=:fileSize, imageWidth=:imageWidth, imageHeight=:imageHeight, cameraMake=:cameraMake, cameraModel=:cameraModel, dateTime=:dateTime, fNumber=:fNumber, iso=:iso, flashID=:flashID, focalLength=:focalLength, lensMake=:lensMake, lensModel=:lensModel, exposureTime=:exposureTime, exposureBias=:exposureBias, exifVersion=:exifVersion, dateTimeOriginal=:dateTimeOriginal, dateTimeDigitized=:dateTimeDigitized, whiteBalance=:whiteBalance, focalLength35=:focalLength35, gps=:gps, thumbnail=:thumbnail WHERE id=:id;"); + query.prepare("UPDATE picture SET fileName=:fileName, filePath=:filePath, fileSize=:fileSize, imageWidth=:imageWidth, imageHeight=:imageHeight, imageOrientation=:imageOrientation, cameraMake=:cameraMake, cameraModel=:cameraModel, dateTime=:dateTime, fNumber=:fNumber, iso=:iso, flashID=:flashID, focalLength=:focalLength, lensMake=:lensMake, lensModel=:lensModel, exposureTime=:exposureTime, exposureBias=:exposureBias, exifVersion=:exifVersion, dateTimeOriginal=:dateTimeOriginal, dateTimeDigitized=:dateTimeDigitized, whiteBalance=:whiteBalance, focalLength35=:focalLength35, gps=:gps, thumbnail=:thumbnail WHERE id=:id;"); } else - query.prepare("INSERT INTO picture (fileName, filePath, fileSize, imageWidth, imageHeight, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :filePath, :fileSize, :imageWidth, :imageHeight, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);"); + query.prepare("INSERT INTO picture (fileName, filePath, fileSize, imageWidth, imageHeight, imageOrientation, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :filePath, :fileSize, :imageWidth, :imageHeight, :imageOrientation, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);"); query.bindValue(":id", m_iID); @@ -106,6 +107,7 @@ bool cPicture::toDB() query.bindValue(":fileSize", m_iFileSize); query.bindValue(":imageWidth", m_imageWidth); query.bindValue(":imageHeight", m_imageHeight); + query.bindValue(":imageOrientation", m_imageOrientation); query.bindValue(":cameraMake", m_cameraMake); query.bindValue(":cameraModel", m_cameraModel); query.bindValue(":dateTime", m_dateTime); @@ -180,6 +182,16 @@ qint32 cPicture::imageHeight() return(m_imageHeight); } +void cPicture::setImageOrientation(const qint16& imageOrientation) +{ + m_imageOrientation = imageOrientation; +} + +qint16 cPicture::imageOrientation() +{ + return(m_imageOrientation); +} + void cPicture::setCameraMake(const QString& cameraMake) { m_cameraMake = cameraMake; @@ -416,6 +428,7 @@ bool cPictureList::load() " fileSize, " " imageWidth, " " imageHeight, " + " imageOrientation, " " cameraMake, " " cameraModel, " " dateTime, " @@ -451,6 +464,7 @@ bool cPictureList::load() lpPicture->setFileSize(query.value("fileSize").toLongLong()); lpPicture->setImageWidth(query.value("imageWidth").toInt()); lpPicture->setImageHeight(query.value("imageHeight").toInt()); + lpPicture->setImageOrientation(static_cast(query.value("imageOrientation").toInt())); lpPicture->setCameraMake(query.value("cameraMake").toString()); lpPicture->setCameraModel(query.value("cameraModel").toString()); lpPicture->setDateTime(query.value("dateTime").toDateTime()); diff --git a/cpicture.h b/cpicture.h index 00a2e06..3632f0e 100644 --- a/cpicture.h +++ b/cpicture.h @@ -75,6 +75,19 @@ public: */ qint32 imageHeight(); + /** + * @brief + * + * @param imageOrientation + */ + void setImageOrientation(const qint16& imageOrientation); + /** + * @brief + * + * @return qint16 + */ + qint16 imageOrientation(); + /** * @brief * @@ -373,6 +386,7 @@ private: QImage m_thumbnail; /**< TODO: describe */ qint32 m_imageWidth; /**< TODO: describe */ qint32 m_imageHeight; /**< TODO: describe */ + qint16 m_imageOrientation; /**< TODO: describe */ QString m_cameraMake; /**< TODO: describe */ QString m_cameraModel; /**< TODO: describe */ QDateTime m_dateTime; /**< TODO: describe */ diff --git a/cpicturelibrary.cpp b/cpicturelibrary.cpp index 0d39595..c6a302d 100644 --- a/cpicturelibrary.cpp +++ b/cpicturelibrary.cpp @@ -113,6 +113,7 @@ bool cPictureLibrary::createDatabase() " fileSize BIGINT, " " imageWidth INTEGER, " " imageHeight INTEGER, " + " imageOrientation INTEGER, " " cameraMake TEXT, " " cameraModel TEXT, " " dateTime DATETIME, " @@ -186,6 +187,7 @@ bool cPictureLibrary::updateDatabase3(qint32 version) " fileSize BIGINT, " " imageWidth INTEGER, " " imageHeight INTEGER, " + " imageOrientation INTEGER, " " cameraMake TEXT, " " cameraModel TEXT, " " dateTime DATETIME, " diff --git a/ctoolboxinfo.cpp b/ctoolboxinfo.cpp index c9e42fc..06c7028 100644 --- a/ctoolboxinfo.cpp +++ b/ctoolboxinfo.cpp @@ -28,5 +28,6 @@ void cToolBoxInfo::setPicture(cPicture* lpPicture) ui->m_lpFileName->setText(lpPicture->fileName()); ui->m_lpDate->setText(lpPicture->dateTime().toString()); ui->m_lpSize->setText(QString("%1x%2").arg(lpPicture->imageWidth()).arg(lpPicture->imageHeight())); - ui->m_lpCamera->setText(QString("%1 %2").arg(lpPicture->cameraMake()).arg(lpPicture->cameraModel())); +// ui->m_lpCamera->setText(QString("%1 %2").arg(lpPicture->cameraMake()).arg(lpPicture->cameraModel())); + ui->m_lpCamera->setText(QString("%1").arg(lpPicture->imageOrientation())); }