diff options
Diffstat (limited to 'tksao/frame/fitscompress.C')
-rw-r--r-- | tksao/frame/fitscompress.C | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/tksao/frame/fitscompress.C b/tksao/frame/fitscompress.C new file mode 100644 index 0000000..62ef786 --- /dev/null +++ b/tksao/frame/fitscompress.C @@ -0,0 +1,130 @@ +// Copyright (C) 1999-2016 +// Smithsonian Astrophysical Observatory, Cambridge, MA, USA +// For conditions of distribution and use, see copyright notice in "copyright" + +#include "fitsimage.h" +#include "compress.h" +#include "rice.h" +#include "gzip.h" +#include "hcompress.h" +#include "plio.h" + +void FitsImage::initCompress() +{ + int bitpix = fits_->getInteger("ZBITPIX",0); + char* type = fits_->getString("ZCMPTYPE"); + if (!bitpix || !type) { + if (type) + delete [] type; + return ; + } + + if (post_) + delete post_; + post_ = NULL; + + if (!strncmp(type,"RICE_1",6) || !(strncmp(type,"RICE_ONE",8))) + switch (bitpix) { + case 8: + post_ = new FitsRicem<unsigned char>(fits_); + break; + case 16: + post_ = new FitsRicem<short>(fits_); + break; + case -16: + post_ = new FitsRicem<unsigned short>(fits_); + break; + case 32: + post_ = new FitsRicem<int>(fits_); + break; + case 64: + post_ = new FitsRicem<long long>(fits_); + break; + case -32: + post_ = new FitsRicem<float>(fits_); + break; + case -64: + post_ = new FitsRicem<double>(fits_); + break; + } + else if (!strncmp(type,"GZIP_1",6) || !strncmp(type,"GZIP_2",6)) + switch (bitpix) { + case 8: + post_ = new FitsGzipm<unsigned char>(fits_); + break; + case 16: + post_ = new FitsGzipm<short>(fits_); + break; + case -16: + post_ = new FitsGzipm<unsigned short>(fits_); + break; + case 32: + post_ = new FitsGzipm<int>(fits_); + break; + case 64: + post_ = new FitsGzipm<long long>(fits_); + break; + case -32: + post_ = new FitsGzipm<float>(fits_); + break; + case -64: + post_ = new FitsGzipm<double>(fits_); + break; + } + else if (!strncmp(type,"PLIO_1",6)) + switch (bitpix) { + case 8: + post_ = new FitsPliom<unsigned char>(fits_); + break; + case 16: + post_ = new FitsPliom<short>(fits_); + break; + case -16: + post_ = new FitsPliom<unsigned short>(fits_); + break; + case 32: + post_ = new FitsPliom<int>(fits_); + break; + case 64: + post_ = new FitsPliom<long long>(fits_); + break; + case -32: + post_ = new FitsPliom<float>(fits_); + break; + case -64: + post_ = new FitsPliom<double>(fits_); + break; + } + else if (!strncmp(type,"HCOMPRESS_1",11)) + switch (bitpix) { + case 8: + post_ = new FitsHcompressm<unsigned char>(fits_); + break; + case 16: + post_ = new FitsHcompressm<short>(fits_); + break; + case -16: + post_ = new FitsHcompressm<unsigned short>(fits_); + break; + case 32: + post_ = new FitsHcompressm<int>(fits_); + break; + case 64: + post_ = new FitsHcompressm<long long>(fits_); + break; + case -32: + post_ = new FitsHcompressm<float>(fits_); + break; + case -64: + post_ = new FitsHcompressm<double>(fits_); + break; + } + else { + ; // unknown compression type + } + + if (type) + delete [] type; + + return; +} |