63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
#include <QCoreApplication>
|
|
#include <QCommandLineParser>
|
|
#include "../rawimage.h"
|
|
#include "../loadimage.h"
|
|
|
|
bool OpenGLES = false;
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
QCoreApplication a(argc, argv);
|
|
|
|
QCommandLineParser parser;
|
|
parser.addOption({{"s", "size"}, "Size of the thumbnail in pixels (default: 128)", "size", "128"});
|
|
parser.addPositionalArgument("input", "Input image file");
|
|
parser.addPositionalArgument("output", "Output image file");
|
|
parser.addHelpOption();
|
|
|
|
parser.process(a);
|
|
|
|
QStringList args = parser.positionalArguments();
|
|
|
|
if(args.size() < 2)
|
|
return 1;
|
|
|
|
QString input = args[0];
|
|
QString output = args[1];
|
|
|
|
ImageInfoData info;
|
|
std::shared_ptr<RawImage> rawImage;
|
|
if(!loadImage(input, info, rawImage))
|
|
return 2;
|
|
|
|
if(!rawImage)
|
|
return 3;
|
|
|
|
bool ok;
|
|
int size = parser.value("s").toInt(&ok);
|
|
if(!ok)
|
|
size = 128;
|
|
|
|
QSize rect(rawImage->width(), rawImage->height());
|
|
rect.scale(size, size, Qt::KeepAspectRatio);
|
|
rawImage->calcStats();
|
|
rawImage->resize(rect.width(), rect.height());
|
|
if(rawImage->imageStats().m_median[0] < rawImage->norm() * 0.2f)
|
|
{
|
|
MTFParam mtfParams = rawImage->calcMTFParams(true);
|
|
rawImage->applySTF(mtfParams);
|
|
}
|
|
rawImage->convertToType(RawImage::UINT8);
|
|
|
|
QImage img;
|
|
if(rawImage->channels() == 1)
|
|
img = QImage((const uchar*)rawImage->data(), rawImage->width(), rawImage->height(), rawImage->widthBytes(), QImage::Format_Grayscale8);
|
|
else
|
|
img = QImage((const uchar*)rawImage->data(), rawImage->width(), rawImage->height(), rawImage->widthBytes(), QImage::Format_RGBA8888);
|
|
|
|
if(!img.save(output, "png"))
|
|
return 4;
|
|
|
|
return 0;
|
|
}
|