OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimNullPixelFlip.cpp
Go to the documentation of this file.
1 //*******************************************************************
2 //
3 // License: See top level LICENSE.txt file.
4 //
5 // Author: Garrett Potts
6 //
7 // Description:
8 //
9 //
10 //*******************************************************************
11 // $Id$
12 
15 
18  ReplacementType replacementType)
19 :m_clipMode(clipMode),
20 m_replacementType(replacementType)
21 {
22 }
23 
25 {
26 }
27 
29  ossim_uint32 resLevel)
30 {
32  if(!isSourceEnabled()||!result.valid())
33  {
34  return result.get();
35  }
37 
38  if((status == OSSIM_FULL)||
39  (status == OSSIM_NULL))
40  {
41  return result.get();
42  }
43  // Call the appropriate load method.
44  switch (result->getScalarType())
45  {
46  case OSSIM_UCHAR:
47  {
48  flipPixels(ossim_uint8(0), result.get(), resLevel);
49  break;
50  }
51 
52  case OSSIM_UINT16:
53  case OSSIM_USHORT11:
54  case OSSIM_USHORT12:
55  case OSSIM_USHORT13:
56  case OSSIM_USHORT14:
57  case OSSIM_USHORT15:
58  {
59  flipPixels(ossim_uint16(0), result.get(), resLevel);
60  break;
61  }
62 
63  case OSSIM_SSHORT16:
64  {
65  flipPixels(ossim_sint16(0), result.get(), resLevel);
66  break;
67  }
68  case OSSIM_UINT32:
69  {
70  flipPixels(ossim_uint32(0), result.get(), resLevel);
71  break;
72  }
73  case OSSIM_SINT32:
74  {
75  flipPixels(ossim_sint32(0), result.get(), resLevel);
76  break;
77  }
78  case OSSIM_FLOAT32:
80  {
81  flipPixels(ossim_float32(0), result.get(), resLevel);
82  break;
83  }
84 
86  case OSSIM_FLOAT64:
87  {
88  flipPixels(ossim_float64(0), result.get(), resLevel);
89  break;
90  }
91 
93  default:
94  {
95 // ossimNotify(ossimNotifyLevel_WARN)
96 // << "ossimPixelFlipper::getTile Unsupported scalar type!" << endl;
97  break;
98  }
99  }
100 
101  return result;
102 }
103 
104 template <class T>
106  ossimImageData* inputTile,
107  ossim_uint32 resLevel)
108 {
109  if (!inputTile) return;
111  ossimIrect rect = inputTile->getImageRectangle();
112  ossimIrect imageBounds = getBoundingRect(resLevel);
113  ossimIrect clipRect;
114  if(!rect.intersects(imageBounds))
115  {
116  return;
117  }
118  clipRect = rect.clipToRect(imageBounds);
119  if((status == OSSIM_EMPTY)||
120  (status == OSSIM_PARTIAL))
121  {
122  if(!rect.completely_within(imageBounds))
123  {
124  ossim_uint32 bands = inputTile->getNumberOfBands();
125  ossimIpt origin = clipRect.ul() - rect.ul();
126  ossim_uint32 bandIdx = 0;
127  ossim_uint32 inputW = inputTile->getWidth();
128  ossim_uint32 originOffset = origin.y*inputW + origin.x;
129  ossim_uint32 w = clipRect.width();
130  ossim_uint32 h = clipRect.height();
131  ossim_uint32 x = 0;
132  ossim_uint32 y = 0;
133  for(bandIdx = 0; bandIdx < bands; ++bandIdx)
134  {
135  T* bandPtr = static_cast<T*>(inputTile->getBuf(bandIdx)) + originOffset;
136  T nullValue = static_cast<T>(inputTile->getNullPix(bandIdx));
137  T replaceValue = (m_replacementType==ReplacementType_MINPIX?static_cast<T>(inputTile->getMinPix(bandIdx)):
138  static_cast<T>(inputTile->getMaxPix(bandIdx)));
139  for(y = 0; y < h; ++y)
140  {
141  for(x = 0; x < w; ++x)
142  {
143  if(bandPtr[x] == nullValue)
144  {
145  bandPtr[x] = replaceValue;
146  }
147  }
148  bandPtr += inputW;
149  }
150  }
151  }
152  else
153  {
154  ossim_uint32 bands = inputTile->getNumberOfBands();
155  ossim_uint32 bandIdx = 0;
156  ossim_uint32 size = inputTile->getWidth()*inputTile->getHeight();
157  for(bandIdx = 0; bandIdx < bands; ++bandIdx)
158  {
159  T* bandPtr = static_cast<T*>(inputTile->getBuf(bandIdx));
160  T nullValue = static_cast<T>(inputTile->getNullPix(bandIdx));
161  T replaceValue = (m_replacementType==ReplacementType_MINPIX?static_cast<T>(inputTile->getMinPix(bandIdx)):
162  static_cast<T>(inputTile->getMaxPix(bandIdx)));
163 
164  ossim_uint32 idx = 0;
165  for(idx = 0; idx < size;++idx)
166  {
167  if((*bandPtr) == nullValue)
168  {
169  (*bandPtr) = replaceValue;
170  }
171  ++bandPtr;
172  }
173  }
174  inputTile->setDataObjectStatus(OSSIM_FULL);
175  }
176  }
177 }
16 bit unsigned integer (15 bits used)
virtual ossim_uint32 getWidth() const
ossim_uint32 x
virtual bool isSourceEnabled() const
Definition: ossimSource.cpp:79
virtual ossimIrect getBoundingRect(ossim_uint32 resLevel=0) const
This will return the bounding rect of the source.
virtual const ossim_float64 * getMaxPix() const
virtual ossim_uint32 getNumberOfBands() const
64 bit floating point
16 bit unsigned integer
ossim_uint32 y
bool valid() const
Definition: ossimRefPtr.h:75
float ossim_float32
ossim_uint32 height() const
Definition: ossimIrect.h:487
const ossimIpt & ul() const
Definition: ossimIrect.h:274
virtual ossimDataObjectStatus getDataObjectStatus() const
virtual ossim_uint32 getHeight() const
16 bit unsigned integer (14 bits used)
16 bit unsigned integer (13 bits used)
32 bit floating point
bool intersects(const ossimIrect &rect) const
Definition: ossimIrect.cpp:183
RTTI_DEF1(ossimNullPixelFlip, "ossimNullPixelFlip", ossimImageSourceFilter)
unsigned short ossim_uint16
32 bit unsigned integer
bool completely_within(const ossimIrect &rect) const
Definition: ossimIrect.cpp:425
double ossim_float64
virtual ossimRefPtr< ossimImageData > getTile(const ossimIrect &tile_rect, ossim_uint32 resLevel=0)
yy_size_t size
signed short ossim_sint16
32 bit signed integer
unsigned int ossim_uint32
virtual const ossim_float64 * getNullPix() const
32 bit normalized floating point
void flipPixels(T dummy, ossimImageData *inpuTile, ossim_uint32 resLevel)
signed int ossim_sint32
ossimNullPixelFlip(ClipMode clipMode=ClipMode_BOUNDING_RECT, ReplacementType replacementType=ReplacementType_MINPIX)
virtual ossimIrect getImageRectangle() const
ossim_uint32 width() const
Definition: ossimIrect.h:500
ossimIrect clipToRect(const ossimIrect &rect) const
Definition: ossimIrect.cpp:501
virtual void initialize()
virtual const ossim_float64 * getMinPix() const
return status
virtual ossimScalarType getScalarType() const
64 bit normalized floating point
16 bit unsigned integer (11 bits used)
ossim_int32 y
Definition: ossimIpt.h:142
virtual const void * getBuf() const
virtual void setDataObjectStatus(ossimDataObjectStatus status) const
Full list found in ossimConstants.h.
ReplacementType m_replacementType
ossim_int32 x
Definition: ossimIpt.h:141
ossimDataObjectStatus
Definitions for data object status.
16 bit signed integer
unsigned char ossim_uint8
8 bit unsigned iteger
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)
16 bit unsigned integer (12 bits used)