Add compression parameters

This commit is contained in:
2024-03-25 22:53:13 +01:00
parent 9f7e2ab6b4
commit bbc13ec8a5
4 changed files with 48 additions and 9 deletions
+32 -2
View File
@@ -517,10 +517,11 @@ bool loadImage(const QString &path, ImageInfoData &info, std::shared_ptr<RawImag
return ret;
}
ConvertRunable::ConvertRunable(const QString &in, const QString &out, const QString &format) :
ConvertRunable::ConvertRunable(const QString &in, const QString &out, const QString &format, const ConvertParams &params) :
m_infile(in),
m_outfile(out),
m_format(format)
m_format(format),
m_params(params)
{
}
@@ -598,6 +599,7 @@ void writeFITSImage(fitsfile *fw, std::shared_ptr<RawImage> rawimage, ImageInfoD
void ConvertRunable::run()
{
qDebug() << m_infile << m_outfile;
ImageInfoData imageinfo;
std::shared_ptr<RawImage> rawimage;
loadImage(m_infile, imageinfo, rawimage);
@@ -646,6 +648,18 @@ void ConvertRunable::run()
image.addFITSKeyword({record.key.toStdString(), record.value.toString().toStdString(), record.comment.toStdString()});
}
if(m_params.compressionType.startsWith("zstd") && LibXISF::DataBlock::CompressionCodecSupported(LibXISF::DataBlock::ZSTD))
image.setCompression(LibXISF::DataBlock::ZSTD, m_params.compressionLevel);
else if(m_params.compressionType.startsWith("lz4hc"))
image.setCompression(LibXISF::DataBlock::LZ4HC, m_params.compressionLevel);
else if(m_params.compressionType.startsWith("lz4"))
image.setCompression(LibXISF::DataBlock::LZ4, m_params.compressionLevel);
else if(m_params.compressionType.startsWith("zlib"))
image.setCompression(LibXISF::DataBlock::Zlib, m_params.compressionLevel);
if(m_params.compressionType.endsWith("+sh"))
image.setByteshuffling(true);
xisf.writeImage(image);
xisf.save(m_outfile.toLocal8Bit().data());
}
@@ -661,6 +675,13 @@ void ConvertRunable::run()
fitsfile *fw;
if(QFileInfo(m_outfile).exists())QFile::remove(m_outfile);
fits_create_diskfile(&fw, m_outfile.toLocal8Bit().data(), &status);
if(!m_params.compressionType.isEmpty())
{
if(m_params.compressionType == "gzip")
fits_set_compression_type(fw, GZIP_1, &status);
else if(m_params.compressionType == "rice")
fits_set_compression_type(fw, RICE_1, &status);
}
writeFITSImage(fw, rawimage, imageinfo);
fits_close_file(fw, &status);
}
@@ -694,3 +715,12 @@ void ConvertRunable::run()
}
}
}
ConvertRunable::ConvertParams::ConvertParams(const QVariantMap &map)
{
if(map.contains("compressionLevel"))
compressionLevel = map["compressionLevel"].toInt();
if(map.contains("compressionType"))
compressionType = map["compressionType"].toString();
}