From 32004fe0544119a13f0777a68d860b500368307b Mon Sep 17 00:00:00 2001 From: Rafael Date: Mon, 21 Mar 2016 03:10:28 +0100 Subject: [PATCH] pictures are openable with -showpic= argument --- PictureDialog.cpp | 5 ++ PictureDialog.h | 1 + PictureDialog.ui | 10 ++++ SnapmaticPicture.cpp | 114 ++++++++++++++++++++++++++++++++++++++++++- SnapmaticPicture.h | 18 +++++-- main.cpp | 37 ++++++++++++-- 6 files changed, 177 insertions(+), 8 deletions(-) diff --git a/PictureDialog.cpp b/PictureDialog.cpp index b588a48..537240b 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -12,3 +12,8 @@ PictureDialog::~PictureDialog() { delete ui; } + +void PictureDialog::setSnapmaticPicture(QPixmap pixmap) +{ + ui->labPicture->setPixmap(pixmap); +} diff --git a/PictureDialog.h b/PictureDialog.h index 5363361..db221bb 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -13,6 +13,7 @@ class PictureDialog : public QDialog public: explicit PictureDialog(QWidget *parent = 0); + void setSnapmaticPicture(QPixmap pixmap); ~PictureDialog(); private: diff --git a/PictureDialog.ui b/PictureDialog.ui index 22bd98e..61f7be9 100755 --- a/PictureDialog.ui +++ b/PictureDialog.ui @@ -1,3 +1,4 @@ + PictureDialog @@ -12,6 +13,15 @@ Dialog + + + + + + + + + diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 3f9001c..44efaec 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -16,8 +16,120 @@ *****************************************************************************/ #include "SnapmaticPicture.h" +#include +#include +#include +#include +int snapmaticHeaderLength = 278; +int snapmaticUsefulLength = 256; +int jpegPreHeaderLength = 14; +int jpegPicStreamLength = 524288; -SnapmaticPicture::SnapmaticPicture(QObject *parent) : QObject(parent) +SnapmaticPicture::SnapmaticPicture(QObject *parent, QString fileName) : QObject(parent) { + // Init + cachePicture = QPixmap(0,0); + picFileName = ""; + pictureStr = ""; + lastStep = ""; + jsonStr = ""; + // Set pic fileName + if (fileName != "") + { + picFileName = fileName; + } +} + +bool SnapmaticPicture::readingPicture() +{ + // Start opening file + // lastStep is like currentStep + + QFile *picFile = new QFile(picFileName); + if (!picFile->open(QFile::ReadOnly)) + { + lastStep = "1;/1,OpenFile," + convertDrawStringForLog(picFileName); + return false; + } + + // Reading Snapmatic Header + if (!picFile->isReadable()) + { + lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",1,NOHEADER"; + return false; + } + QByteArray snapmaticHeaderLine = picFile->read(snapmaticHeaderLength); + pictureStr = getSnapmaticPictureString(snapmaticHeaderLine); + + // Reading JPEG Header Line + if (!picFile->isReadable()) + { + lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",2,NOHEADER"; + return false; + } + QByteArray jpegHeaderLine = picFile->read(jpegPreHeaderLength); + + // Checking for JPEG + jpegHeaderLine.remove(0,2); + if (jpegHeaderLine.left(4) != "JPEG") + { + lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",2,NOJPEG"; + return false; + } + + lastStep = "3;/1,ReadedFile," + convertDrawStringForLog(picFileName); + QByteArray jpegRawContent = picFile->read(jpegPicStreamLength); + return cachePicture.loadFromData(jpegRawContent); +} + +QString SnapmaticPicture::getSnapmaticPictureString(QByteArray snapmaticHeader) +{ + QByteArray snapmaticUsefulBytes = snapmaticHeader.left(snapmaticUsefulLength); + snapmaticUsefulBytes.replace(QByteArray::fromHex("00"),""); + snapmaticUsefulBytes.replace(QByteArray::fromHex("01"),""); + return QString::fromAscii(snapmaticUsefulBytes); +} + +bool SnapmaticPicture::readingPictureFromFile(QString fileName) +{ + if (fileName != "") + { + picFileName = fileName; + return readingPicture(); + } + else + { + return false; + } +} + +void SnapmaticPicture::setPixmap(QPixmap pixmap) +{ + cachePicture = pixmap; +} + +QString SnapmaticPicture::getPictureStr() +{ + return pictureStr; +} + +QString SnapmaticPicture::getLastStep() +{ + return lastStep; +} + +QPixmap SnapmaticPicture::getPixmap() +{ + return cachePicture; +} + +QString SnapmaticPicture::convertDrawStringForLog(QString inputStr) +{ + return inputStr.replace("&","&u;").replace(",","&c;"); +} + +QString SnapmaticPicture::convertLogStringForDraw(QString inputStr) +{ + return inputStr.replace("&c;",",").replace("&u;","&"); } diff --git a/SnapmaticPicture.h b/SnapmaticPicture.h index 7bb0428..538c789 100755 --- a/SnapmaticPicture.h +++ b/SnapmaticPicture.h @@ -20,20 +20,30 @@ #include #include +#include +#include class SnapmaticPicture : public QObject { Q_OBJECT public: - explicit SnapmaticPicture(QObject *parent = 0); + explicit SnapmaticPicture(QObject *parent = 0, QString fileName = ""); bool readingPictureFromFile(QString fileName); - bool setPicture(QPixmap pixmap); + bool readingPicture(); + void setPixmap(QPixmap pixmap); + void resetValues(); QPixmap getPixmap(); + QString getLastStep(); + QString getPictureStr(); private: + QString getSnapmaticPictureString(QByteArray snapmaticHeader); + QString convertDrawStringForLog(QString inputStr); + QString convertLogStringForDraw(QString inputStr); QPixmap cachePicture; - QString picDate; - QString picTime; + QString picFileName; + QString pictureStr; + QString lastStep; QString jsonStr; signals: diff --git a/main.cpp b/main.cpp index 8f0f55f..adb5559 100755 --- a/main.cpp +++ b/main.cpp @@ -15,15 +15,46 @@ * limitations under the License. *****************************************************************************/ -#include "frmGTA5Sync.h" +#include "SnapmaticPicture.h" +#include "PictureDialog.h" #include +#include +#include +#include int main(int argc, char *argv[]) { QApplication a(argc, argv); - frmGTA5Sync w; - w.show(); + QStringList applicationArgs = a.arguments(); + QString selectedAction; + QString arg1; + + foreach(QString currentArg, applicationArgs) + { + QString reworkedArg; + if (currentArg.left(9) == "-showpic=" && selectedAction == "") + { + reworkedArg = currentArg.remove(0,9); + arg1 = reworkedArg; + selectedAction = "showpic"; + } + } + + if (selectedAction == "showpic") + { + SnapmaticPicture picture; + qDebug() << picture.readingPictureFromFile(arg1); + qDebug() << picture.getLastStep(); + PictureDialog picDialog; + picDialog.setWindowTitle(picture.getPictureStr()); + picDialog.setSnapmaticPicture(picture.getPixmap()); + picDialog.show(); + + return a.exec(); + + qDebug() << "showpic runned"; + } return a.exec(); }