IDS peak IPL  v1.7.0
peak_ipl_binning.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
18 
22 namespace peak
23 {
24 namespace ipl
25 {
26 
27 class Binning final
28 {
29 public:
35  enum class BinningMode : uint16_t
36  {
37  Average = 0,
38  Sum = 1
39  };
40  Binning();
41  ~Binning();
42  Binning(const Binning& other) = delete;
43  Binning& operator=(const Binning& other) = delete;
44  Binning(Binning&& other) noexcept;
45  Binning& operator=(Binning&& other) noexcept;
46 
56  void SetBinningX(uint8_t value);
57 
65  uint8_t BinningX() const;
66 
76  void SetBinningY(uint8_t value);
77 
85  uint8_t BinningY() const;
86 
94  uint8_t BinningMin() const;
102  uint8_t BinningMax() const;
103 
116  Size2D ExpectedOutputSize(Size2D inputSize, PixelFormatName pixelFormat) const;
117 
127  void SetMode(BinningMode mode);
128 
136  BinningMode Mode() const;
137 
147  bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const;
148 
160  Image Process(const Image& inputImage) const;
161 
162 private:
163  PEAK_IPL_BINNING_HANDLE m_backendHandle{};
164 };
166 {
168 }
170 {
171  if (m_backendHandle)
172  {
174  }
175 }
176 inline Binning::Binning(Binning&& other) noexcept
177 {
178  *this = std::move(other);
179 }
180 inline Binning& Binning::operator=(Binning&& other) noexcept
181 {
182  if (this != &other)
183  {
184  (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_Destruct(m_backendHandle);
185  m_backendHandle = other.m_backendHandle;
186  other.m_backendHandle = nullptr;
187  }
188 
189  return *this;
190 }
191 inline void Binning::SetBinningX(uint8_t value)
192 {
193  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_SetBinningX(m_backendHandle, &value); });
194 }
195 inline void Binning::SetBinningY(uint8_t value)
196 {
197  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_SetBinningY(m_backendHandle, &value); });
198 }
199 inline uint8_t Binning::BinningX() const
200 {
201  uint8_t value;
202 
203  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningX(m_backendHandle, &value); });
204 
205  return value;
206 }
207 inline uint8_t Binning::BinningY() const
208 {
209  uint8_t value;
210 
211  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningY(m_backendHandle, &value); });
212 
213  return value;
214 }
215 inline uint8_t Binning::BinningMin() const
216 {
217  uint8_t value;
218 
220  [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningMin(m_backendHandle, &value); });
221 
222  return value;
223 }
224 inline uint8_t Binning::BinningMax() const
225 {
226  uint8_t value;
227 
229  [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningMax(m_backendHandle, &value); });
230 
231  return value;
232 }
233 inline Size2D Binning::ExpectedOutputSize(Size2D inputSize, PixelFormatName pixelFormat) const
234 {
235  Size2D size{};
237  return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_ExpectedOutputSize(m_backendHandle, &size.width, &size.height,
238  inputSize.width, inputSize.height, static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormat));
239  });
240 
241  return size;
242 }
243 inline bool Binning::IsPixelFormatSupported(PixelFormatName pixelFormatName) const
244 {
245  PEAK_IPL_BOOL8 isPixelFormatSupported = 0;
246 
249  static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormatName),
250  reinterpret_cast<PEAK_IPL_BOOL8*>(&isPixelFormatSupported));
251  });
252 
253  return isPixelFormatSupported > 0;
254 }
255 inline Image Binning::Process(const Image& inputImage) const
256 {
257  PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
260  m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage), &outputImageHandle);
261  });
262 
263  return ImageBackendAccessor::CreateImage(outputImageHandle);
264 }
266 {
268  m_backendHandle, reinterpret_cast<PEAK_IPL_BINNINGMODE*>(&mode)); });
269 }
271 {
272  BinningMode value;
273 
275  m_backendHandle, reinterpret_cast<PEAK_IPL_BINNINGMODE*>(&value)); });
276 
277  return value;
278 }
279 
280 
281 } /* namespace ipl */
282 } /* namespace peak */
uint8_t BinningX() const
Returns the value of the binning in horizontal direction.
Definition: peak_ipl_binning.hpp:199
PEAK_IPL_C_API PEAK_IPL_Binning_SetBinningX(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningXValue)
Sets the value of binning in horizontal direction.
PEAK_IPL_C_API PEAK_IPL_Binning_Construct(PEAK_IPL_BINNING_HANDLE *binningHandle)
Creates a binning.
PEAK_IPL_C_API PEAK_IPL_Binning_IsPixelformatSupported(PEAK_IPL_BINNING_HANDLE binningHandle, PEAK_IPL_PIXEL_FORMAT pixelFormat, PEAK_IPL_BOOL8 *isPixelFormatSupported)
Asks the given binning whether it supports the given pixel format.
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningMax(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningMax)
Returns the maximum binning value which can be set.
PEAK_IPL_C_API PEAK_IPL_Binning_SetBinningMode(PEAK_IPL_BINNING_HANDLE binningHandle, PEAK_IPL_BINNINGMODE *mode)
Sets the value of binning mode.
#define PEAK_IPL_C_ABI_PREFIX
Definition: peak_ipl_dll_defines.h:16
size_t height
Definition: peak_ipl_simple_types.hpp:180
PixelFormatName
Enum holding the possible pixel format names.
Definition: peak_ipl_simple_types.hpp:38
Definition: peak_ipl_binning.hpp:27
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningMin(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningMin)
Returns the minimum binning value which can be set.
The "peak::ipl" namespace contains the whole image processing library.
Definition: peak_ipl_binning.hpp:22
uint8_t BinningY() const
Returns the value of the binning in vertical direction.
Definition: peak_ipl_binning.hpp:207
PEAK_IPL_C_API PEAK_IPL_Binning_ExpectedOutputSize(PEAK_IPL_BINNING_HANDLE binningHandle, size_t *outputWidth, size_t *outputHeight, size_t inputWidth, size_t inputHeight, PEAK_IPL_PIXEL_FORMAT pixelFormat)
Returns the size of a binned image given the input size and pixelformat.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition: peak_ipl_exception.hpp:182
2D size of an image.
Definition: peak_ipl_simple_types.hpp:177
Stores the pixel format, width and height of an image and the pointer to the image buffer...
Definition: peak_ipl_image.hpp:39
Image Process(const Image &inputImage) const
Applies the binning on the given image.
Definition: peak_ipl_binning.hpp:255
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition: peak_ipl_backend.h:326
PEAK_IPL_C_API PEAK_IPL_Binning_SetBinningY(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningYValue)
Sets the value of binning in vertical direction.
void SetBinningY(uint8_t value)
Sets the values of the binning in vertical direction.
Definition: peak_ipl_binning.hpp:195
int8_t PEAK_IPL_BOOL8
Definition: peak_ipl_backend.h:25
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningY(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningYValue)
Returns the value of binning in vertical direction.
Size2D ExpectedOutputSize(Size2D inputSize, PixelFormatName pixelFormat) const
Returns the size of a binned image given the input size and pixelformat.
Definition: peak_ipl_binning.hpp:233
BinningMode
Mode parameter for the binning algorithm.
Definition: peak_ipl_binning.hpp:35
bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const
Returns whether the binning supports the given pixel format.
Definition: peak_ipl_binning.hpp:243
PEAK_IPL_C_API PEAK_IPL_Binning_Destruct(PEAK_IPL_BINNING_HANDLE binningHandle)
Destroys the binning associated with the given handle.
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningMode(PEAK_IPL_BINNING_HANDLE binningHandle, PEAK_IPL_BINNINGMODE *mode)
Returns the value of binning mode.
void SetBinningX(uint8_t value)
Sets the values of the binning in horizontal direction.
Definition: peak_ipl_binning.hpp:191
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningX(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningXValue)
Returns the value of binning in horizontal direction.
~Binning()
Definition: peak_ipl_binning.hpp:169
uint8_t BinningMin() const
Returns the minimum value for the binning.
Definition: peak_ipl_binning.hpp:215
Binning & operator=(const Binning &other)=delete
size_t width
Definition: peak_ipl_simple_types.hpp:179
Binning()
Definition: peak_ipl_binning.hpp:165
PEAK_IPL_C_API PEAK_IPL_Binning_Process(PEAK_IPL_BINNING_HANDLE binningHandle, PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Apply the binning on the given image.
uint8_t BinningMax() const
Returns the maximum value for the binning.
Definition: peak_ipl_binning.hpp:224
BinningMode Mode() const
Returns the value of the binning mode.
Definition: peak_ipl_binning.hpp:270
struct PEAK_IPL_BINNING * PEAK_IPL_BINNING_HANDLE
Definition: peak_ipl_backend.h:306
void SetMode(BinningMode mode)
Sets the values of the binning mode.
Definition: peak_ipl_binning.hpp:265