Isis 3 Programmer Reference
Pixel.cpp
Go to the documentation of this file.
1 
23 #include "Pixel.h"
24 
25 using namespace std;
26 
27 namespace Isis {
28 
34  Pixel::Pixel() {
35  m_line = 0;
36  m_sample = 0;
37  m_band = 0;
38  m_DN = Isis::Null;
39  }
40 
41 
52  Pixel::Pixel(int sample, int line, int band, double DN) {
53  m_sample = sample;
54  m_line = line;
55  m_band = band;
56  m_DN = DN;
57  }
58 
59 
67  Pixel::Pixel(const Pixel& pixel) {
68  m_sample = pixel.sample();
69  m_line = pixel.line();
70  m_band = pixel.band();
71  m_DN = pixel.DN();
72  }
73 
74 
82  Pixel &Pixel::operator=(const Pixel& other) {
83  m_line = other.line();
84  m_sample = other.sample();
85  m_band = other.band();
86  m_DN = other.DN();
87  return *this;
88  }
89 
90 
92  Pixel::~Pixel() {}
93 
94 
96  int Pixel::line() const {
97  return m_line;
98  }
99 
100 
102  int Pixel::sample() const {
103  return m_sample;
104  }
105 
106 
108  int Pixel::band() const {
109  return m_band;
110  }
111 
112 
114  double Pixel::DN() const {
115  return m_DN;
116  }
117 
118 
127  unsigned char Pixel::To8Bit(const double d) {
128  if(d < VALID_MIN8) {
129  if(d == NULL8) return NULL1;
130  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SAT1;
131  else if(d == LOW_REPR_SAT8) return LOW_REPR_SAT1;
132  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SAT1;
133  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SAT1;
134  else return LOW_REPR_SAT1;
135  }
136  else {
137  if(d < VALID_MIN1 - 0.5) return LOW_REPR_SAT1;
138  else if(d > VALID_MAX1 + 0.5) return HIGH_REPR_SAT1;
139 
140  else {
141  int itemp = (int)(d + 0.5);
142  if(itemp < VALID_MIN1) return LOW_REPR_SAT1;
143  else if(itemp > VALID_MAX1) return HIGH_REPR_SAT1;
144  else return (unsigned char)(d + 0.5);
145  }
146  }
147  }
148 
149 
156  unsigned char Pixel::To8Bit() {
157  return To8Bit(m_DN);
158  }
159 
160 
168  short int Pixel::To16Bit(const double d) {
169  if(d < VALID_MIN8) {
170  if(d == NULL8) return NULL2;
171  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SAT2;
172  else if(d == LOW_REPR_SAT8) return LOW_REPR_SAT2;
173  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SAT2;
174  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SAT2;
175  else return LOW_REPR_SAT2;
176  }
177  else {
178  if(d < VALID_MIN2 - 0.5) return LOW_REPR_SAT2;
179  else if(d > VALID_MAX2 + 0.5) return HIGH_REPR_SAT2;
180 
181  else {
182  int itemp;
183  if(d < 0.0) {
184  itemp = (int)(d - 0.5);
185  }
186  else {
187  itemp = (int)(d + 0.5);
188  }
189 
190  if(itemp < VALID_MIN2) return LOW_REPR_SAT2;
191  else if(itemp > VALID_MAX2) return HIGH_REPR_SAT2;
192  else if(d < 0.0) return (short)(d - 0.5);
193  else return (short)(d + 0.5);
194  }
195  }
196  }
197 
198 
205  short int Pixel::To16Bit() {
206  return To16Bit(m_DN);
207  }
208 
216  short unsigned int Pixel::To16UBit(const double d) {
217  if(d < VALID_MIN8) {
218  if(d == NULL8) return NULLU2;
219  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SATU2;
220  else if(d == LOW_REPR_SAT8) return LOW_REPR_SATU2;
221  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SATU2;
222  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SATU2;
223  else return LOW_REPR_SATU2;
224  }
225  else {
226  if(d < VALID_MIN2 - 0.5) return LOW_REPR_SATU2;
227  else if(d > VALID_MAX2 + 0.5) return HIGH_REPR_SATU2;
228 
229  else {
230  int itemp;
231  if(d < 0.0) {
232  itemp = (int)(d - 0.5);
233  }
234  else {
235  itemp = (int)(d + 0.5);
236  }
237 
238  if(itemp < VALID_MIN2) return LOW_REPR_SATU2;
239  else if(itemp > VALID_MAX2) return HIGH_REPR_SATU2;
240  else if(d < 0.0) return (short)(d - 0.5);
241  else return (short)(d + 0.5);
242  }
243  }
244  }
245 
246 
253  short unsigned int Pixel::To16Ubit() {
254  return To16UBit(m_DN);
255  }
256 
264  float Pixel::To32Bit(const double d) {
265  if(d < (double) VALID_MIN8) {
266  if(d == NULL8) return(NULL4);
267  else if(d == LOW_REPR_SAT8) return(LOW_REPR_SAT4);
268  else if(d == LOW_INSTR_SAT8) return(LOW_INSTR_SAT4);
269  else if(d == HIGH_INSTR_SAT8) return(HIGH_INSTR_SAT4);
270  else if(d == HIGH_REPR_SAT8) return(HIGH_REPR_SAT4);
271  else return(LOW_REPR_SAT4);
272  }
273  else if(d > (double) VALID_MAX8) return(HIGH_REPR_SAT8);
274  else return((float) d);
275  }
276 
283  float Pixel::To32Bit() {
284  return To32Bit(m_DN);
285  }
286 
287 
296  double Pixel::ToDouble(const unsigned char d) {
297  if(d < VALID_MIN1) {
298  if(d == NULL1) return(NULL8);
299  else if(d == LOW_REPR_SAT1) return(LOW_REPR_SAT8);
300  else if(d == LOW_INSTR_SAT1) return(LOW_INSTR_SAT8);
301  else if(d == HIGH_REPR_SAT1) return(HIGH_REPR_SAT8);
302  else if(d == HIGH_INSTR_SAT1) return(HIGH_INSTR_SAT8);
303  else return(LOW_REPR_SAT8);
304  }
305  else if(d > VALID_MAX1) return(HIGH_REPR_SAT8);
306  else return((double) d);
307  }
308 
309 
317  double Pixel::ToDouble(const short int d) {
318  if(d < VALID_MIN2) {
319  if(d == NULL2) return(NULL8);
320  else if(d == LOW_REPR_SAT2) return(LOW_REPR_SAT8);
321  else if(d == LOW_INSTR_SAT2) return(LOW_INSTR_SAT8);
322  else if(d == HIGH_REPR_SAT2) return(HIGH_REPR_SAT8);
323  else if(d == HIGH_INSTR_SAT2) return(HIGH_INSTR_SAT8);
324  else return(LOW_REPR_SAT8);
325  }
326  else return((double) d);
327  }
328 
336  double Pixel::ToDouble(const short unsigned int d) {
337  if(d < VALID_MINU2) {
338  if(d == NULLU2) return(NULL8);
339  else if(d == LOW_REPR_SATU2) return(LOW_REPR_SAT8);
340  else if(d == LOW_INSTR_SATU2) return(LOW_INSTR_SAT8);
341  else if(d == HIGH_REPR_SATU2) return(HIGH_REPR_SAT8);
342  else if(d == HIGH_INSTR_SATU2) return(HIGH_INSTR_SAT8);
343  else return(LOW_REPR_SAT8);
344  }
345  else return((double) d);
346  }
347 
348 
356  double Pixel::ToDouble(const float d) {
357  if(d < VALID_MIN4) {
358  if(d == NULL4) return(NULL8);
359  else if(d == LOW_REPR_SAT4) return(LOW_REPR_SAT8);
360  else if(d == LOW_INSTR_SAT4) return(LOW_INSTR_SAT8);
361  else if(d == HIGH_REPR_SAT4) return(HIGH_REPR_SAT8);
362  else if(d == HIGH_INSTR_SAT4) return(HIGH_INSTR_SAT8);
363  else return(LOW_REPR_SAT8);
364  }
365  else if(d > VALID_MAX4) return(HIGH_REPR_SAT8);
366  else return((double) d);
367  }
368 
369 
375  double Pixel::ToDouble() {
376  return m_DN;
377  }
378 
379 
390  float Pixel::ToFloat(const unsigned char t) {
391  if(t < (double) VALID_MIN1) {
392  if(t == NULL1) return(NULL4);
393  else if(t == LOW_REPR_SAT1) return(LOW_REPR_SAT4);
394  else if(t == LOW_INSTR_SAT1) return(LOW_INSTR_SAT4);
395  else if(t == HIGH_INSTR_SAT1) return(HIGH_INSTR_SAT4);
396  else if(t == HIGH_REPR_SAT1) return(HIGH_REPR_SAT4);
397  else return(LOW_REPR_SAT4);
398  }
399  else if(t > (double) VALID_MAX1) return(HIGH_REPR_SAT8);
400  else return((float) t);
401  }
402 
411  float Pixel::ToFloat(const short int t) {
412  if(t < (double) VALID_MIN2) {
413  if(t == NULL2) return(NULL4);
414  else if(t == LOW_REPR_SAT2) return(LOW_REPR_SAT4);
415  else if(t == LOW_INSTR_SAT2) return(LOW_INSTR_SAT4);
416  else if(t == HIGH_INSTR_SAT2) return(HIGH_INSTR_SAT4);
417  else if(t == HIGH_REPR_SAT2) return(HIGH_REPR_SAT4);
418  else return(LOW_REPR_SAT4);
419  }
420  else if(t > (double) VALID_MAX2) return(HIGH_REPR_SAT8);
421  else return((float) t);
422  }
423 
432  float Pixel::ToFloat(const short unsigned int t) {
433  if(t < (double) VALID_MINU2) {
434  if(t == NULLU2) return(NULL4);
435  else if(t == LOW_REPR_SATU2) return(LOW_REPR_SAT4);
436  else if(t == LOW_INSTR_SATU2) return(LOW_INSTR_SAT4);
437  else if(t == HIGH_INSTR_SATU2) return(HIGH_INSTR_SAT4);
438  else if(t == HIGH_REPR_SATU2) return(HIGH_REPR_SAT4);
439  else return(LOW_REPR_SAT4);
440  }
441  else if(t > (double) VALID_MAXU2) return(HIGH_REPR_SAT8);
442  else return((float) t);
443  }
444 
453  float Pixel::ToFloat(const double t) {
454  if(t < (double) VALID_MIN8) {
455  if(t == NULL8) return(NULL4);
456  else if(t == LOW_REPR_SAT8) return(LOW_REPR_SAT4);
457  else if(t == LOW_INSTR_SAT8) return(LOW_INSTR_SAT4);
458  else if(t == HIGH_INSTR_SAT8) return(HIGH_INSTR_SAT4);
459  else if(t == HIGH_REPR_SAT8) return(HIGH_REPR_SAT4);
460  else return(LOW_REPR_SAT4);
461  }
462  else if(t > (double) VALID_MAX8) return(HIGH_REPR_SAT8);
463  else return((float) t);
464  }
465 
473  float Pixel::ToFloat() {
474  return ToFloat(m_DN);
475  }
476 
485  string Pixel::ToString(double d) {
486  if(IsSpecial(d)) {
487  if(IsNull(d)) return string("Null");
488  else if(IsLrs(d)) return string("Lrs");
489  else if(IsHrs(d)) return string("Hrs");
490  else if(IsHis(d)) return string("His");
491  else if(IsLis(d)) return string("Lis");
492  else return string("Invalid");
493  }
494 
495  QString result;
496  return result.setNum(d).toStdString();
497  }
498 
504  string Pixel::ToString() {
505  return ToString(m_DN);
506  }
507 }
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:110
Namespace for the standard library.
int sample() const
Definition: Pixel.cpp:102
bool IsSpecial(const double d)
Returns if the input pixel is special.
Definition: SpecialPixel.h:212
Store and/or manipulate pixel values.
Definition: Pixel.h:63
double ToDouble(const T &value)
Helper function to convert values to doubles.
Definition: HiCalUtil.h:248
int band() const
Definition: Pixel.cpp:108
int line() const
Definition: Pixel.cpp:96
double DN() const
Definition: Pixel.cpp:114
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
QString ToString(const T &value)
Helper function to convert values to strings.
Definition: HiCalUtil.h:260