USGS

Isis 3.0 Object Programmers' Reference

Home

Pixel.cpp
Go to the documentation of this file.
1 
23 #include "Pixel.h"
24 
25 using namespace std;
26 
27 namespace Isis {
36  unsigned char Pixel::To8Bit(const double d) {
37  if(d < VALID_MIN8) {
38  if(d == NULL8) return NULL1;
39  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SAT1;
40  else if(d == LOW_REPR_SAT8) return LOW_REPR_SAT1;
41  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SAT1;
42  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SAT1;
43  else return LOW_REPR_SAT1;
44  }
45  else {
46  if(d < VALID_MIN1 - 0.5) return LOW_REPR_SAT1;
47  else if(d > VALID_MAX1 + 0.5) return HIGH_REPR_SAT1;
48 
49  else {
50  int itemp = (int)(d + 0.5);
51  if(itemp < VALID_MIN1) return LOW_REPR_SAT1;
52  else if(itemp > VALID_MAX1) return HIGH_REPR_SAT1;
53  else return (unsigned char)(d + 0.5);
54  }
55  }
56  }
57 
65  short int Pixel::To16Bit(const double d) {
66  if(d < VALID_MIN8) {
67  if(d == NULL8) return NULL2;
68  else if(d == LOW_INSTR_SAT8) return LOW_INSTR_SAT2;
69  else if(d == LOW_REPR_SAT8) return LOW_REPR_SAT2;
70  else if(d == HIGH_INSTR_SAT8) return HIGH_INSTR_SAT2;
71  else if(d == HIGH_REPR_SAT8) return HIGH_REPR_SAT2;
72  else return LOW_REPR_SAT2;
73  }
74  else {
75  if(d < VALID_MIN2 - 0.5) return LOW_REPR_SAT2;
76  else if(d > VALID_MAX2 + 0.5) return HIGH_REPR_SAT2;
77 
78  else {
79  int itemp;
80  if(d < 0.0) {
81  itemp = (int)(d - 0.5);
82  }
83  else {
84  itemp = (int)(d + 0.5);
85  }
86 
87  if(itemp < VALID_MIN2) return LOW_REPR_SAT2;
88  else if(itemp > VALID_MAX2) return HIGH_REPR_SAT2;
89  else if(d < 0.0) return (short)(d - 0.5);
90  else return (short)(d + 0.5);
91  }
92  }
93  }
94 
102  float Pixel::To32Bit(const double d) {
103  if(d < (double) VALID_MIN8) {
104  if(d == NULL8) return(NULL4);
105  else if(d == LOW_REPR_SAT8) return(LOW_REPR_SAT4);
106  else if(d == LOW_INSTR_SAT8) return(LOW_INSTR_SAT4);
107  else if(d == HIGH_INSTR_SAT8) return(HIGH_INSTR_SAT4);
108  else if(d == HIGH_REPR_SAT8) return(HIGH_REPR_SAT4);
109  else return(LOW_REPR_SAT4);
110  }
111  else if(d > (double) VALID_MAX8) return(HIGH_REPR_SAT8);
112  else return((float) d);
113  }
114 
123  double Pixel::ToDouble(const unsigned char d) {
124  if(d < VALID_MIN1) {
125  if(d == NULL1) return(NULL8);
126  else if(d == LOW_REPR_SAT1) return(LOW_REPR_SAT8);
127  else if(d == LOW_INSTR_SAT1) return(LOW_INSTR_SAT8);
128  else if(d == HIGH_REPR_SAT1) return(HIGH_REPR_SAT8);
129  else if(d == HIGH_INSTR_SAT1) return(HIGH_INSTR_SAT8);
130  else return(LOW_REPR_SAT8);
131  }
132  else if(d > VALID_MAX1) return(HIGH_REPR_SAT8);
133  else return((double) d);
134  }
135 
143  double Pixel::ToDouble(const short int d) {
144  if(d < VALID_MIN2) {
145  if(d == NULL2) return(NULL8);
146  else if(d == LOW_REPR_SAT2) return(LOW_REPR_SAT8);
147  else if(d == LOW_INSTR_SAT2) return(LOW_INSTR_SAT8);
148  else if(d == HIGH_REPR_SAT2) return(HIGH_REPR_SAT8);
149  else if(d == HIGH_INSTR_SAT2) return(HIGH_INSTR_SAT8);
150  else return(LOW_REPR_SAT8);
151  }
152  else return((double) d);
153  }
154 
162  double Pixel::ToDouble(const float d) {
163  if(d < VALID_MIN4) {
164  if(d == NULL4) return(NULL8);
165  else if(d == LOW_REPR_SAT4) return(LOW_REPR_SAT8);
166  else if(d == LOW_INSTR_SAT4) return(LOW_INSTR_SAT8);
167  else if(d == HIGH_REPR_SAT4) return(HIGH_REPR_SAT8);
168  else if(d == HIGH_INSTR_SAT4) return(HIGH_INSTR_SAT8);
169  else return(LOW_REPR_SAT8);
170  }
171  else if(d > VALID_MAX4) return(HIGH_REPR_SAT8);
172  else return((double) d);
173  }
174 
185  float Pixel::ToFloat(const unsigned char t) {
186  if(t < (double) VALID_MIN1) {
187  if(t == NULL1) return(NULL4);
188  else if(t == LOW_REPR_SAT1) return(LOW_REPR_SAT4);
189  else if(t == LOW_INSTR_SAT1) return(LOW_INSTR_SAT4);
190  else if(t == HIGH_INSTR_SAT1) return(HIGH_INSTR_SAT4);
191  else if(t == HIGH_REPR_SAT1) return(HIGH_REPR_SAT4);
192  else return(LOW_REPR_SAT4);
193  }
194  else if(t > (double) VALID_MAX1) return(HIGH_REPR_SAT8);
195  else return((float) t);
196  }
197 
206  float Pixel::ToFloat(const short int t) {
207  if(t < (double) VALID_MIN2) {
208  if(t == NULL2) return(NULL4);
209  else if(t == LOW_REPR_SAT2) return(LOW_REPR_SAT4);
210  else if(t == LOW_INSTR_SAT2) return(LOW_INSTR_SAT4);
211  else if(t == HIGH_INSTR_SAT2) return(HIGH_INSTR_SAT4);
212  else if(t == HIGH_REPR_SAT2) return(HIGH_REPR_SAT4);
213  else return(LOW_REPR_SAT4);
214  }
215  else if(t > (double) VALID_MAX2) return(HIGH_REPR_SAT8);
216  else return((float) t);
217  }
218 
227  float Pixel::ToFloat(const double t) {
228  if(t < (double) VALID_MIN8) {
229  if(t == NULL8) return(NULL4);
230  else if(t == LOW_REPR_SAT8) return(LOW_REPR_SAT4);
231  else if(t == LOW_INSTR_SAT8) return(LOW_INSTR_SAT4);
232  else if(t == HIGH_INSTR_SAT8) return(HIGH_INSTR_SAT4);
233  else if(t == HIGH_REPR_SAT8) return(HIGH_REPR_SAT4);
234  else return(LOW_REPR_SAT4);
235  }
236  else if(t > (double) VALID_MAX8) return(HIGH_REPR_SAT8);
237  else return((float) t);
238  }
239 
248  string Pixel::ToString(double d) {
249  if(IsSpecial(d)) {
250  if(IsNull(d)) return string("Null");
251  else if(IsLrs(d)) return string("Lrs");
252  else if(IsHrs(d)) return string("Hrs");
253  else if(IsHis(d)) return string("His");
254  else if(IsLis(d)) return string("Lis");
255  else return string("Invalid");
256  }
257 
258  QString result;
259  return result.setNum(d).toStdString();
260  }
261 }