vil_flip.cxx
Go to the documentation of this file.
1 // This is core/vil/vil_flip.cxx
2 //:
3 // \file
4 // \author Ian Scott.
5 //
6 // \verbatim
7 // Modifications
8 // 23 Oct.2003 - Peter Vanroose - Added support for 64-bit int pixels
9 // \endverbatim
10 //
11 //-----------------------------------------------------------------------------
12 
13 #include "vil_flip.h"
14 
16 {
17  return new vil_flip_lr_image_resource(src);
18 }
19 
21  src_(src)
22 {
23 }
24 
26  unsigned j0, unsigned nj) const
27 {
28  if (i0 + ni > src_->ni()) return nullptr;
29  vil_image_view_base_sptr vs = src_->get_copy_view(src_->ni()- i0-ni, ni, j0, nj);
30  if (!vs) return nullptr;
31 
32  switch (vs->pixel_format())
33  {
34 #define macro( F, T ) \
35  case F : \
36  return new vil_image_view<T > (vil_flip_lr(static_cast<const vil_image_view<T >&>(*vs)));
37 
38  macro(VIL_PIXEL_FORMAT_BYTE, vxl_byte)
39  macro(VIL_PIXEL_FORMAT_SBYTE, vxl_sbyte)
40 #if VXL_HAS_INT_64
41  macro(VIL_PIXEL_FORMAT_UINT_64, vxl_uint_64)
42  macro(VIL_PIXEL_FORMAT_INT_64, vxl_int_64)
43 #endif
44  macro(VIL_PIXEL_FORMAT_UINT_32, vxl_uint_32)
45  macro(VIL_PIXEL_FORMAT_INT_32, vxl_int_32)
46  macro(VIL_PIXEL_FORMAT_UINT_16, vxl_uint_16)
47  macro(VIL_PIXEL_FORMAT_INT_16, vxl_int_16)
50  macro(VIL_PIXEL_FORMAT_COMPLEX_FLOAT , std::complex<float>)
51  macro(VIL_PIXEL_FORMAT_COMPLEX_DOUBLE , std::complex<double>)
52 #undef macro
53  default:
54  return nullptr;
55  }
56 }
57 
59  unsigned j0, unsigned nj) const
60 {
61  if (i0 + ni > src_->ni()) return nullptr;
62  vil_image_view_base_sptr vs = src_->get_view(src_->ni()- i0-ni, ni, j0, nj);
63  if (!vs) return nullptr;
64 
65  switch (vs->pixel_format())
66  {
67 #define macro( F, T ) \
68  case F : \
69  return new vil_image_view<T > (vil_flip_lr(static_cast<const vil_image_view<T >&>(*vs)));
70 
71  macro(VIL_PIXEL_FORMAT_BYTE, vxl_byte)
72  macro(VIL_PIXEL_FORMAT_SBYTE, vxl_sbyte)
73 #if VXL_HAS_INT_64
74  macro(VIL_PIXEL_FORMAT_UINT_64, vxl_uint_64)
75  macro(VIL_PIXEL_FORMAT_INT_64, vxl_int_64)
76 #endif
77  macro(VIL_PIXEL_FORMAT_UINT_32, vxl_uint_32)
78  macro(VIL_PIXEL_FORMAT_INT_32, vxl_int_32)
79  macro(VIL_PIXEL_FORMAT_UINT_16, vxl_uint_16)
80  macro(VIL_PIXEL_FORMAT_INT_16, vxl_int_16)
83  macro(VIL_PIXEL_FORMAT_COMPLEX_FLOAT , std::complex<float>)
84  macro(VIL_PIXEL_FORMAT_COMPLEX_DOUBLE , std::complex<double>)
85 #undef macro
86  default:
87  return nullptr;
88  }
89 }
90 
91 //: Put the data in this view back into the image source.
93  unsigned j0)
94 {
95  if (i0 + im.ni() > src_->ni()) return false;
96  switch (im.pixel_format())
97  {
98 #define macro( F, T ) \
99  case F : \
100  return src_->put_view(vil_flip_lr(static_cast<const vil_image_view<T >&>(im)), src_->ni()-i0-im.ni(), j0);
101 
102  macro(VIL_PIXEL_FORMAT_BYTE, vxl_byte)
103  macro(VIL_PIXEL_FORMAT_SBYTE, vxl_sbyte)
104 #if VXL_HAS_INT_64
105  macro(VIL_PIXEL_FORMAT_UINT_64, vxl_uint_64)
106  macro(VIL_PIXEL_FORMAT_INT_64, vxl_int_64)
107 #endif
108  macro(VIL_PIXEL_FORMAT_UINT_32, vxl_uint_32)
109  macro(VIL_PIXEL_FORMAT_INT_32, vxl_int_32)
110  macro(VIL_PIXEL_FORMAT_UINT_16, vxl_uint_16)
111  macro(VIL_PIXEL_FORMAT_INT_16, vxl_int_16)
114  macro(VIL_PIXEL_FORMAT_COMPLEX_FLOAT , std::complex<float>)
115  macro(VIL_PIXEL_FORMAT_COMPLEX_DOUBLE , std::complex<double>)
116 #undef macro
117  default:
118  return false;
119  }
120 }
123 {
124  return new vil_flip_ud_image_resource(src);
125 }
128  src_(src)
129 {
130 }
131 
134  unsigned j0, unsigned nj) const
135 {
136  if (j0 + nj > src_->nj()) return nullptr;
137  vil_image_view_base_sptr vs = src_->get_copy_view(i0, ni, src_->nj()- j0-nj, nj);
138  if (!vs) return nullptr;
139 
140  switch (vs->pixel_format())
141  {
142 #define macro( F, T ) \
143  case F : \
144  return new vil_image_view<T > (vil_flip_ud(static_cast<const vil_image_view<T >&>(*vs)));
145 
146  macro(VIL_PIXEL_FORMAT_BYTE, vxl_byte)
147  macro(VIL_PIXEL_FORMAT_SBYTE, vxl_sbyte)
148 #if VXL_HAS_INT_64
149  macro(VIL_PIXEL_FORMAT_UINT_64, vxl_uint_64)
150  macro(VIL_PIXEL_FORMAT_INT_64, vxl_int_64)
151 #endif
152  macro(VIL_PIXEL_FORMAT_UINT_32, vxl_uint_32)
153  macro(VIL_PIXEL_FORMAT_INT_32, vxl_int_32)
154  macro(VIL_PIXEL_FORMAT_UINT_16, vxl_uint_16)
155  macro(VIL_PIXEL_FORMAT_INT_16, vxl_int_16)
158  macro(VIL_PIXEL_FORMAT_COMPLEX_FLOAT , std::complex<float>)
159  macro(VIL_PIXEL_FORMAT_COMPLEX_DOUBLE , std::complex<double>)
160 #undef macro
161  default:
162  return nullptr;
163  }
164 }
167  unsigned j0, unsigned nj) const
168 {
169  if (i0 + ni > src_->ni()) return nullptr;
170  vil_image_view_base_sptr vs = src_->get_view(i0, ni, src_->nj()-j0-nj, nj);
171  if (!vs) return nullptr;
172 
173  switch (vs->pixel_format())
174  {
175 #define macro( F, T ) \
176  case F : \
177  return new vil_image_view<T > (vil_flip_ud(static_cast<const vil_image_view<T >&>(*vs)));
178 
179  macro(VIL_PIXEL_FORMAT_BYTE, vxl_byte)
180  macro(VIL_PIXEL_FORMAT_SBYTE, vxl_sbyte)
181 #if VXL_HAS_INT_64
182  macro(VIL_PIXEL_FORMAT_UINT_64, vxl_uint_64)
183  macro(VIL_PIXEL_FORMAT_INT_64, vxl_int_64)
184 #endif
185  macro(VIL_PIXEL_FORMAT_UINT_32, vxl_uint_32)
186  macro(VIL_PIXEL_FORMAT_INT_32, vxl_int_32)
187  macro(VIL_PIXEL_FORMAT_UINT_16, vxl_uint_16)
188  macro(VIL_PIXEL_FORMAT_INT_16, vxl_int_16)
191  macro(VIL_PIXEL_FORMAT_COMPLEX_FLOAT , std::complex<float>)
192  macro(VIL_PIXEL_FORMAT_COMPLEX_DOUBLE , std::complex<double>)
193 #undef macro
194  default:
195  return nullptr;
196  }
197 }
198 
199 //: Put the data in this view back into the image source.
201  unsigned j0)
202 {
203  if (i0 + im.ni() > src_->ni()) return false;
204  switch (im.pixel_format())
205  {
206 #define macro( F, T ) \
207  case F : \
208  return src_->put_view(vil_flip_ud(static_cast<const vil_image_view<T >&>(im)), i0, src_->nj()-j0-im.nj()); \
209 
210  macro(VIL_PIXEL_FORMAT_BYTE, vxl_byte)
211  macro(VIL_PIXEL_FORMAT_SBYTE, vxl_sbyte)
212 #if VXL_HAS_INT_64
213  macro(VIL_PIXEL_FORMAT_UINT_64, vxl_uint_64)
214  macro(VIL_PIXEL_FORMAT_INT_64, vxl_int_64)
215 #endif
216  macro(VIL_PIXEL_FORMAT_UINT_32, vxl_uint_32)
217  macro(VIL_PIXEL_FORMAT_INT_32, vxl_int_32)
218  macro(VIL_PIXEL_FORMAT_UINT_16, vxl_uint_16)
219  macro(VIL_PIXEL_FORMAT_INT_16, vxl_int_16)
222  macro(VIL_PIXEL_FORMAT_COMPLEX_FLOAT , std::complex<float>)
223  macro(VIL_PIXEL_FORMAT_COMPLEX_DOUBLE , std::complex<double>)
224 #undef macro
225  default:
226  return false;
227  }
228 }
An abstract base class of smart pointers to actual image data in memory.
unsigned nj() const override
Dimensions: Planes x ni x nj.
Definition: vil_flip.h:53
std::complex<float> is a scalar for vil's purposes.
vil_flip_ud_image_resource(vil_image_resource_sptr const &)
Definition: vil_flip.cxx:126
unsigned ni() const override
Dimensions: Planes x ni x nj.
Definition: vil_flip.h:52
unsigned ni() const override
Dimensions: Planes x ni x nj.
Definition: vil_flip.h:93
#define macro(F, T)
unsigned ni() const
Width.
vil_flip_lr_image_resource(vil_image_resource_sptr const &)
Definition: vil_flip.cxx:19
virtual enum vil_pixel_format pixel_format() const =0
Return a description of the concrete data pixel type.
vil_image_resource_sptr src_
Reference to underlying image source.
Definition: vil_flip.h:76
vil_image_view< T > vil_flip_ud(const vil_image_view< T > &v)
Create a reflected view in which y -> nj-1-j.
Definition: vil_flip.h:30
unsigned nj() const override
Dimensions: Planes x ni x nj.
Definition: vil_flip.h:94
vil_image_view_base_sptr get_copy_view() const
Create a read/write view of a copy of all the data.
bool put_view(const vil_image_view_base &im, unsigned i0, unsigned j0) override
Put the data in this view back into the image source.
Definition: vil_flip.cxx:91
vil_image_view< T > vil_flip_lr(const vil_image_view< T > &v)
Create a reflected view in which i -> ni-1-i.
Definition: vil_flip.h:17
bool put_view(const vil_image_view_base &im, unsigned i0, unsigned j0) override
Put the data in this view back into the image source.
Definition: vil_flip.cxx:199
A generic_image adaptor that behaves like a flipped left to right version of its input.
Definition: vil_flip.h:45
vil_image_view_base_sptr get_view() const
Create a read/write view of all the data.
std::complex<double> is a scalar for vil's purposes.
vil_image_resource_sptr src_
Reference to underlying image source.
Definition: vil_flip.h:116
A generic_image adaptor that behaves like a flipped left to right version of its input.
Definition: vil_flip.h:86