Isis 3.0 Programmer Reference
Back | Home
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 
76  Pixel &Pixel::operator=(const Pixel& other) {
77  m_line = other.line();
78  m_sample = other.sample();
79  m_band = other.band();
80  m_DN = other.DN();
81  return *this;
82  }
83 
84 
86  Pixel::~Pixel() {}
87 
88 
90  int Pixel::line() const {
91  return m_line;
92  }
93 
94 
96  int Pixel::sample() const {
97  return m_sample;
98  }
99 
100 
102  int Pixel::band() const {
103  return m_band;
104  }
105 
106 
108  double Pixel::DN() const {
109  return m_DN;
110  }
111 
112 
121  unsigned char Pixel::To8Bit(const double d) {
122  if(d < VALID_MIN8) {
123  if(d == NULL8) return NULL1;
124  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SAT1;
125  else if(d == LOW_REPR_SAT8) return LOW_REPR_SAT1;
126  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SAT1;
127  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SAT1;
128  else return LOW_REPR_SAT1;
129  }
130  else {
131  if(d < VALID_MIN1 - 0.5) return LOW_REPR_SAT1;
132  else if(d > VALID_MAX1 + 0.5) return HIGH_REPR_SAT1;
133 
134  else {
135  int itemp = (int)(d + 0.5);
136  if(itemp < VALID_MIN1) return LOW_REPR_SAT1;
137  else if(itemp > VALID_MAX1) return HIGH_REPR_SAT1;
138  else return (unsigned char)(d + 0.5);
139  }
140  }
141  }
142 
143 
150  unsigned char Pixel::To8Bit() {
151  return To8Bit(m_DN);
152  }
153 
154 
162  short int Pixel::To16Bit(const double d) {
163  if(d < VALID_MIN8) {
164  if(d == NULL8) return NULL2;
165  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SAT2;
166  else if(d == LOW_REPR_SAT8) return LOW_REPR_SAT2;
167  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SAT2;
168  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SAT2;
169  else return LOW_REPR_SAT2;
170  }
171  else {
172  if(d < VALID_MIN2 - 0.5) return LOW_REPR_SAT2;
173  else if(d > VALID_MAX2 + 0.5) return HIGH_REPR_SAT2;
174 
175  else {
176  int itemp;
177  if(d < 0.0) {
178  itemp = (int)(d - 0.5);
179  }
180  else {
181  itemp = (int)(d + 0.5);
182  }
183 
184  if(itemp < VALID_MIN2) return LOW_REPR_SAT2;
185  else if(itemp > VALID_MAX2) return HIGH_REPR_SAT2;
186  else if(d < 0.0) return (short)(d - 0.5);
187  else return (short)(d + 0.5);
188  }
189  }
190  }
191 
192 
199  short int Pixel::To16Bit() {
200  return To16Bit(m_DN);
201  }
202 
210  short unsigned int Pixel::To16UBit(const double d) {
211  if(d < VALID_MIN8) {
212  if(d == NULL8) return NULLU2;
213  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SATU2;
214  else if(d == LOW_REPR_SAT8) return LOW_REPR_SATU2;
215  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SATU2;
216  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SATU2;
217  else return LOW_REPR_SATU2;
218  }
219  else {
220  if(d < VALID_MIN2 - 0.5) return LOW_REPR_SATU2;
221  else if(d > VALID_MAX2 + 0.5) return HIGH_REPR_SATU2;
222 
223  else {
224  int itemp;
225  if(d < 0.0) {
226  itemp = (int)(d - 0.5);
227  }
228  else {
229  itemp = (int)(d + 0.5);
230  }
231 
232  if(itemp < VALID_MIN2) return LOW_REPR_SATU2;
233  else if(itemp > VALID_MAX2) return HIGH_REPR_SATU2;
234  else if(d < 0.0) return (short)(d - 0.5);
235  else return (short)(d + 0.5);
236  }
237  }
238  }
239 
240 
247  short unsigned int Pixel::To16Ubit() {
248  return To16UBit(m_DN);
249  }
250 
258  float Pixel::To32Bit(const double d) {
259  if(d < (double) VALID_MIN8) {
260  if(d == NULL8) return(NULL4);
261  else if(d == LOW_REPR_SAT8) return(LOW_REPR_SAT4);
262  else if(d == LOW_INSTR_SAT8) return(LOW_INSTR_SAT4);
263  else if(d == HIGH_INSTR_SAT8) return(HIGH_INSTR_SAT4);
264  else if(d == HIGH_REPR_SAT8) return(HIGH_REPR_SAT4);
265  else return(LOW_REPR_SAT4);
266  }
267  else if(d > (double) VALID_MAX8) return(HIGH_REPR_SAT8);
268  else return((float) d);
269  }
270 
277  float Pixel::To32Bit() {
278  return To32Bit(m_DN);
279  }
280 
281 
290  double Pixel::ToDouble(const unsigned char d) {
291  if(d < VALID_MIN1) {
292  if(d == NULL1) return(NULL8);
293  else if(d == LOW_REPR_SAT1) return(LOW_REPR_SAT8);
294  else if(d == LOW_INSTR_SAT1) return(LOW_INSTR_SAT8);
295  else if(d == HIGH_REPR_SAT1) return(HIGH_REPR_SAT8);
296  else if(d == HIGH_INSTR_SAT1) return(HIGH_INSTR_SAT8);
297  else return(LOW_REPR_SAT8);
298  }
299  else if(d > VALID_MAX1) return(HIGH_REPR_SAT8);
300  else return((double) d);
301  }
302 
303 
311  double Pixel::ToDouble(const short int d) {
312  if(d < VALID_MIN2) {
313  if(d == NULL2) return(NULL8);
314  else if(d == LOW_REPR_SAT2) return(LOW_REPR_SAT8);
315  else if(d == LOW_INSTR_SAT2) return(LOW_INSTR_SAT8);
316  else if(d == HIGH_REPR_SAT2) return(HIGH_REPR_SAT8);
317  else if(d == HIGH_INSTR_SAT2) return(HIGH_INSTR_SAT8);
318  else return(LOW_REPR_SAT8);
319  }
320  else return((double) d);
321  }
322 
330  double Pixel::ToDouble(const short unsigned int d) {
331  if(d < VALID_MINU2) {
332  if(d == NULLU2) return(NULL8);
333  else if(d == LOW_REPR_SATU2) return(LOW_REPR_SAT8);
334  else if(d == LOW_INSTR_SATU2) return(LOW_INSTR_SAT8);
335  else if(d == HIGH_REPR_SATU2) return(HIGH_REPR_SAT8);
336  else if(d == HIGH_INSTR_SATU2) return(HIGH_INSTR_SAT8);
337  else return(LOW_REPR_SAT8);
338  }
339  else return((double) d);
340  }
341 
342 
350  double Pixel::ToDouble(const float d) {
351  if(d < VALID_MIN4) {
352  if(d == NULL4) return(NULL8);
353  else if(d == LOW_REPR_SAT4) return(LOW_REPR_SAT8);
354  else if(d == LOW_INSTR_SAT4) return(LOW_INSTR_SAT8);
355  else if(d == HIGH_REPR_SAT4) return(HIGH_REPR_SAT8);
356  else if(d == HIGH_INSTR_SAT4) return(HIGH_INSTR_SAT8);
357  else return(LOW_REPR_SAT8);
358  }
359  else if(d > VALID_MAX4) return(HIGH_REPR_SAT8);
360  else return((double) d);
361  }
362 
363 
369  double Pixel::ToDouble() {
370  return m_DN;
371  }
372 
373 
384  float Pixel::ToFloat(const unsigned char t) {
385  if(t < (double) VALID_MIN1) {
386  if(t == NULL1) return(NULL4);
387  else if(t == LOW_REPR_SAT1) return(LOW_REPR_SAT4);
388  else if(t == LOW_INSTR_SAT1) return(LOW_INSTR_SAT4);
389  else if(t == HIGH_INSTR_SAT1) return(HIGH_INSTR_SAT4);
390  else if(t == HIGH_REPR_SAT1) return(HIGH_REPR_SAT4);
391  else return(LOW_REPR_SAT4);
392  }
393  else if(t > (double) VALID_MAX1) return(HIGH_REPR_SAT8);
394  else return((float) t);
395  }
396 
405  float Pixel::ToFloat(const short int t) {
406  if(t < (double) VALID_MIN2) {
407  if(t == NULL2) return(NULL4);
408  else if(t == LOW_REPR_SAT2) return(LOW_REPR_SAT4);
409  else if(t == LOW_INSTR_SAT2) return(LOW_INSTR_SAT4);
410  else if(t == HIGH_INSTR_SAT2) return(HIGH_INSTR_SAT4);
411  else if(t == HIGH_REPR_SAT2) return(HIGH_REPR_SAT4);
412  else return(LOW_REPR_SAT4);
413  }
414  else if(t > (double) VALID_MAX2) return(HIGH_REPR_SAT8);
415  else return((float) t);
416  }
417 
426  float Pixel::ToFloat(const short unsigned int t) {
427  if(t < (double) VALID_MINU2) {
428  if(t == NULLU2) return(NULL4);
429  else if(t == LOW_REPR_SATU2) return(LOW_REPR_SAT4);
430  else if(t == LOW_INSTR_SATU2) return(LOW_INSTR_SAT4);
431  else if(t == HIGH_INSTR_SATU2) return(HIGH_INSTR_SAT4);
432  else if(t == HIGH_REPR_SATU2) return(HIGH_REPR_SAT4);
433  else return(LOW_REPR_SAT4);
434  }
435  else if(t > (double) VALID_MAXU2) return(HIGH_REPR_SAT8);
436  else return((float) t);
437  }
438 
447  float Pixel::ToFloat(const double t) {
448  if(t < (double) VALID_MIN8) {
449  if(t == NULL8) return(NULL4);
450  else if(t == LOW_REPR_SAT8) return(LOW_REPR_SAT4);
451  else if(t == LOW_INSTR_SAT8) return(LOW_INSTR_SAT4);
452  else if(t == HIGH_INSTR_SAT8) return(HIGH_INSTR_SAT4);
453  else if(t == HIGH_REPR_SAT8) return(HIGH_REPR_SAT4);
454  else return(LOW_REPR_SAT4);
455  }
456  else if(t > (double) VALID_MAX8) return(HIGH_REPR_SAT8);
457  else return((float) t);
458  }
459 
467  float Pixel::ToFloat() {
468  return ToFloat(m_DN);
469  }
470 
479  string Pixel::ToString(double d) {
480  if(IsSpecial(d)) {
481  if(IsNull(d)) return string("Null");
482  else if(IsLrs(d)) return string("Lrs");
483  else if(IsHrs(d)) return string("Hrs");
484  else if(IsHis(d)) return string("His");
485  else if(IsLis(d)) return string("Lis");
486  else return string("Invalid");
487  }
488 
489  QString result;
490  return result.setNum(d).toStdString();
491  }
492 
498  string Pixel::ToString() {
499  return ToString(m_DN);
500  }
501 }
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:109
int band() const
Returns the band coordinate of the Pixel.
Definition: Pixel.cpp:102
double DN() const
Returns the DN of the Pixel.
Definition: Pixel.cpp:108
int line() const
Returns the line coordinate of the Pixel.
Definition: Pixel.cpp:90
bool IsSpecial(const double d)
Returns if the input pixel is special.
Definition: SpecialPixel.h:199
Store and/or manipulate pixel values.
Definition: Pixel.h:63
int sample() const
Returns the sample coordinate of the Pixel.
Definition: Pixel.cpp:96

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:25:25