diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-10-27 18:59:29 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-10-27 18:59:29 (GMT) |
commit | d4d595fa7fb12903db9227d33d48b2b00120dbd1 (patch) | |
tree | 7d18365de0d6d1b29399b6a17c7eb01c2eb3ed49 /tksao/frame/colorscale.C | |
parent | 949f96e29bfe0bd8710d775ce220e597064e2589 (diff) | |
download | blt-d4d595fa7fb12903db9227d33d48b2b00120dbd1.zip blt-d4d595fa7fb12903db9227d33d48b2b00120dbd1.tar.gz blt-d4d595fa7fb12903db9227d33d48b2b00120dbd1.tar.bz2 |
Initial commit
Diffstat (limited to 'tksao/frame/colorscale.C')
-rw-r--r-- | tksao/frame/colorscale.C | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/tksao/frame/colorscale.C b/tksao/frame/colorscale.C new file mode 100644 index 0000000..8254a33 --- /dev/null +++ b/tksao/frame/colorscale.C @@ -0,0 +1,207 @@ +// Copyright (C) 1999-2016 +// Smithsonian Astrophysical Observatory, Cambridge, MA, USA +// For conditions of distribution and use, see copyright notice in "copyright" + +#include "colorscale.h" + +ColorScale::ColorScale(int ss) +{ + size_ = ss; + psColors_ = new unsigned char[ss*3]; + memset(psColors_, '0', size_*3); +} + +ColorScale::~ColorScale() +{ + if (psColors_) + delete [] psColors_; +} + +LinearScale::LinearScale(int ss, unsigned char* colorCells, int count) + : ColorScale(ss) +{ + for (int ii=0; ii<ss; ii++) { + double aa = double(ii)/ss; + int ll = (int)(aa * count); + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } +} + +LogScale::LogScale(int ss, unsigned char* colorCells, int count, double exp) + : ColorScale(ss) +{ + for (int ii=0; ii<ss; ii++) { + double aa = log10(exp*double(ii)/ss +1) / log10(exp); + int ll = (int)(aa * count); + // aa can grow slightly greater than 1 + if (ll>=count) + ll = count-1; + memcpy(psColors_+ii*3, colorCells+ll*3, 3); + } +} + +PowScale::PowScale(int ss, unsigned char* colorCells, int count, double exp) + : ColorScale(ss) +{ + for (int ii=0; ii<ss; ii++) { + double aa = (::pow(exp,double(ii)/ss) -1) / exp; + int ll = (int)(aa * count); + // should not be needed + if (ll>=count) + ll = count-1; + memcpy(psColors_+ii*3, colorCells+ll*3, 3); + } +} + +SqrtScale::SqrtScale(int ss, unsigned char* colorCells, int count) + : ColorScale(ss) +{ + for(int ii=0; ii<ss; ii++) { + double aa = double(ii)/ss; + int ll = (int)(sqrt(aa) * count); + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } +} + +SquaredScale::SquaredScale(int ss, unsigned char* colorCells, int count) + : ColorScale(ss) +{ + for(int ii=0; ii<ss; ii++) { + double aa = double(ii)/ss; + int ll = (int)(aa*aa * count); + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } +} + +AsinhScale::AsinhScale(int ss, unsigned char* colorCells, int count) + : ColorScale(ss) +{ + for(int ii=0; ii<ss; ii++) { + double aa = double(ii)/ss; + int ll = (int)(asinh(10*aa)/3 * count); + // it can spill over + if (ll>=count) + ll = count-1; + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } +} + +SinhScale::SinhScale(int ss, unsigned char* colorCells, int count) + : ColorScale(ss) +{ + for(int ii=0; ii<ss; ii++) { + double aa = double(ii)/ss; + int ll = (int)(sinh(3*aa)/10 * count); + // it can spill over + if (ll>=count) + ll = count-1; + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } +} + +HistEquScale::HistEquScale(int ss, unsigned char* colorCells, int count, + double* hist, int histsize) + : ColorScale(ss) +{ + // if no histogram, return linear distribution + if (!hist) + for (int ii=0; ii<ss; ii++) { + double aa = double(ii)/ss; + int ll = (int)(aa * count); + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } + else { + for (int ii=0; ii<ss; ii++) { + double aa = hist[ii*histsize/ss]; + int ll = (int)(aa * count); + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } + } +} + +IISScale::IISScale(unsigned char* colorCells, int count) + : ColorScale(IISSIZE) +{ + for (int ii=0; ii<IISCOLORS; ii++) { + double aa = double(ii)/IISCOLORS; + int ll = (int)(aa * count); + memcpy(psColors_+ii*3, colorCells+ll*3,3); + } + + unsigned char* ptr; + // 0 white (background) + ptr = psColors_; + *ptr++ = 255; + *ptr++ = 255; + *ptr++ = 255; + + ptr = psColors_+IISMAX*3; + // 201 white + *ptr++ = 255; + *ptr++ = 255; + *ptr++ = 255; + // 202 black + *ptr++ = 0; + *ptr++ = 0; + *ptr++ = 0; + // 203 white + *ptr++ = 255; + *ptr++ = 255; + *ptr++ = 255; + // 204 red + *ptr++ = 0; + *ptr++ = 0; + *ptr++ = 255; + // 205 green + *ptr++ = 0; + *ptr++ = 255; + *ptr++ = 0; + // 206 blue + *ptr++ = 255; + *ptr++ = 0; + *ptr++ = 0; + // 207 yellow + *ptr++ = 0; + *ptr++ = 255; + *ptr++ = 255; + // 209 cyan + *ptr++ = 255; + *ptr++ = 255; + *ptr++ = 0; + // 209 magenta + *ptr++ = 255; + *ptr++ = 0; + *ptr++ = 255; + // 210 coral + *ptr++ = 80; + *ptr++ = 127; + *ptr++ = 255; + // 211 maroon + *ptr++ = 96; + *ptr++ = 48; + *ptr++ = 176; + // 212 orange + *ptr++ = 0; + *ptr++ = 165; + *ptr++ = 255; + // 213 khaki + *ptr++ = 140; + *ptr++ = 230; + *ptr++ = 240; + // 214 orchid + *ptr++ = 214; + *ptr++ = 112; + *ptr++ = 218; + // 215 turquoise + *ptr++ = 208; + *ptr++ = 224; + *ptr++ = 64; + // 216 violet + *ptr++ = 238; + *ptr++ = 130; + *ptr++ = 238; + // 217 wheat + *ptr++ = 179; + *ptr++ = 222; + *ptr++ = 245; +} |