#include #include #include #include "../src/rawimage.h" #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" bool loadXISF(const LibXISF::ByteArray &data, std::shared_ptr &rawImage); bool loadFITS(const LibXISF::ByteArray &data, std::shared_ptr &rawImage); int main(int argc, char *argv[]) { std::vector args; for(int i=0; i rawImage; LibXISF::ByteArray data; std::ifstream fr; fr.open(input, std::ios_base::in | std::ios_base::binary); if(!fr.is_open()) return 2; fr.seekg(0, std::ios_base::end); size_t len = fr.tellg(); fr.seekg(0, std::ios_base::beg); data.resize(len); fr.read(data.data(), len); if(fr.bad()) return 3; if(input.find(".xisf") != std::string::npos) { if(!loadXISF(data, rawImage)) return 4; } else { if(!loadFITS(data, rawImage)) return 4; } if(!rawImage) return 5; uint32_t thumbSize = 256; uint32_t w = rawImage->width(); uint32_t h = rawImage->height(); uint32_t cw = thumbSize; uint32_t ch = thumbSize; if (w > h) ch = h * thumbSize / w; else cw = w * thumbSize / h; rawImage->calcStats(); rawImage->resize(cw, ch); if(rawImage->imageStats().m_median[0] < rawImage->norm() * 0.1f) { MTFParam mtfParams = rawImage->calcMTFParams(true); rawImage->applySTF(mtfParams); } rawImage->convertToType(RawImage::UINT8); if(rawImage->channels() == 1) stbi_write_png(output.c_str(), cw, ch, 1, rawImage->data(), rawImage->widthBytes()); else stbi_write_png(output.c_str(), cw, ch, 4, rawImage->data(), rawImage->widthBytes()); return 0; }