diff --git a/classes/parser/convert/converterhelper.cpp b/classes/parser/convert/converterhelper.cpp index ef11198..2c437f1 100644 --- a/classes/parser/convert/converterhelper.cpp +++ b/classes/parser/convert/converterhelper.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #if defined(USE_JS_QTSCRIPT) #include @@ -637,6 +638,47 @@ QString ConverterHelper::dataToString( return result; } +QString ConverterHelper::previewDataToString(Preset *preset, QVector *data, int width, int height) +{ + QString result, converted; + + QString prefix = preset->image()->previewPrefix(); + QString suffix = preset->image()->previewSuffix(); + QString delimiter = preset->image()->previewDelimiter(); + QString bit0 = preset->image()->previewBit0(); + QString bit1 = preset->image()->previewBit1(); + + bool completed = false; + + for (int y = 0; y < height && !completed; y++) { + if (y > 0) { + result.append("\n"); + } + + result.append(prefix); + + for (int x = 0; x < width && !completed; x++) { + // control index limits for compressed data + int index = y * width + x; + + if (index >= data->size()) { + completed = true; + break; + } + + quint32 value = data->at(index); + converted = ((value & 0x00000001) != 0) ? preset->image()->previewBit1() : preset->image()->previewBit0(); + result.append(converted % delimiter); + } + + result.append(suffix); + } + + result.truncate(result.length() - delimiter.length()); + + return result; +} + QString ConverterHelper::scanScript(Preset *preset) { QString result; diff --git a/classes/parser/convert/converterhelper.h b/classes/parser/convert/converterhelper.h index f2a2273..31daff7 100644 --- a/classes/parser/convert/converterhelper.h +++ b/classes/parser/convert/converterhelper.h @@ -66,6 +66,8 @@ public: static QString dataToString(Preset *preset, QVector *data, int width, int height); + static QString previewDataToString(Preset *preset, + QVector *data, int width, int height); static QString scanScript(Preset *preset); static QString scanScriptTemplate(); diff --git a/classes/parser/parsedimagedata.cpp b/classes/parser/parsedimagedata.cpp index 89b93b8..15db928 100644 --- a/classes/parser/parsedimagedata.cpp +++ b/classes/parser/parsedimagedata.cpp @@ -19,8 +19,10 @@ #include "parsedimagedata.h" +#include #include #include +#include #include "tags.h" #include "converterhelper.h" @@ -73,15 +75,32 @@ ParsedImageData::ParsedImageData(Preset *preset, const QImage *image, const Tags this->mPreparedOutputImageData = ConverterHelper::dataToString( preset, &compressedData, compressedWidth, compressedHeight); - //dataString.replace("\n", this->mTags->tagValue(Tags::OutputDataEOL) + this->mTags->tagValue(Tags::OutputDataIndent)); - - // end of conversion - - //this->mTags->setTagValue(Tags::OutputImageData, dataString); // get hash QString hashStr = QString("data: %1, width: %2, height: %3").arg(this->mPreparedOutputImageData).arg(image->width()).arg(image->height()); this->mHash = qHash(hashStr); + + // Preview + // Scan script + QFile filePreviewScript(":/scan_scripts/t2b_f"); + QString previewScript; + + if (filePreviewScript.open(QIODevice::ReadOnly)) { + QTextStream stream(&filePreviewScript); + previewScript = stream.readAll(); + filePreviewScript.close(); + } + + // Collect pixels to make simple preview + QVector previewData; + int previewWidth, previewHeight; + ConverterHelper::pixelsData(preset->prepare(), previewScript, &imagePrepared, &previewData, &previewWidth, &previewHeight); + + ConverterHelper::processPixels(preset, &previewData); + + this->mPreparedOutputImagePreview = ConverterHelper::previewDataToString( + preset, + &previewData, previewWidth, previewHeight); } else { this->mTags->setTagValue(Tags::OutputImageWidth, QString("0")); this->mTags->setTagValue(Tags::OutputImageHeight, QString("0")); @@ -117,3 +136,9 @@ const QString ParsedImageData::outputImageDataWithEOL(const Tags &tags) const return result; } +const QString ParsedImageData::outputImagePreviewWithEOL(const Tags &tags) const +{ + QString result = this->mPreparedOutputImagePreview; + result.replace("\n", tags.tagValue(Tags::OutputDataEOL) + tags.tagValue(Tags::OutputDataIndent)); + return result; +} diff --git a/classes/parser/parsedimagedata.h b/classes/parser/parsedimagedata.h index 293ee0c..29a9b2a 100644 --- a/classes/parser/parsedimagedata.h +++ b/classes/parser/parsedimagedata.h @@ -37,11 +37,13 @@ public: uint hash() const; const QString outputImageDataWithEOL(const Tags &tags) const; + const QString outputImagePreviewWithEOL(const Tags &tags) const; private: Tags *mTags; uint mHash; QString mPreparedOutputImageData; + QString mPreparedOutputImagePreview; }; #endif // PARSEDIMAGEDATA_H diff --git a/classes/parser/parser.cpp b/classes/parser/parser.cpp index 74addfe..87ff4aa 100644 --- a/classes/parser/parser.cpp +++ b/classes/parser/parser.cpp @@ -439,6 +439,7 @@ void Parser::addImagesInfo(Tags &tags, QMap *images) // apply imageParticles to outputImageData data->tags()->setTagValue(Tags::OutputImageData, data->outputImageDataWithEOL(tags)); + data->tags()->setTagValue(Tags::OutputImagePreview, data->outputImagePreviewWithEOL(tags)); } }