IDSpeakIPL  v1.8.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  {
38  Average = 0,
39 
41  Sum = 1
42  };
43 
50  Binning();
51 
58  ~Binning();
59 
71  Binning(const Binning& other);
72 
84  Binning& operator=(const Binning& other);
85 
94  Binning(Binning&& other) noexcept;
95 
104  Binning& operator=(Binning&& other) noexcept;
105 
115  void SetBinningX(uint8_t value);
116 
124  PEAK_IPL_NO_DISCARD uint8_t BinningX() const;
125 
135  void SetBinningY(uint8_t value);
136 
144  PEAK_IPL_NO_DISCARD uint8_t BinningY() const;
145 
153  PEAK_IPL_NO_DISCARD uint8_t BinningMin() const;
154 
162  PEAK_IPL_NO_DISCARD uint8_t BinningMax() const;
163 
177 
187  void SetMode(BinningMode mode);
188 
197 
207  PEAK_IPL_NO_DISCARD bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const;
208 
220  PEAK_IPL_NO_DISCARD Image Process(const Image& inputImage) const;
221 
222 private:
223  PEAK_IPL_BINNING_HANDLE m_backendHandle{};
224 };
225 
227 {
229 }
230 
232 {
233  if (m_backendHandle)
234  {
235  (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_Destruct(m_backendHandle);
236  }
237 }
238 
239 inline Binning::Binning(const Binning& other)
240 {
241  if (other.m_backendHandle)
242  {
243  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_Acquire(other.m_backendHandle); });
244  }
245 
246  m_backendHandle = other.m_backendHandle;
247 }
248 
249 inline Binning& Binning::operator=(const Binning& other)
250 {
251  if (this != &other)
252  {
253  if (m_backendHandle)
254  {
255  (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_Destruct(m_backendHandle);
256  }
257 
258  if (other.m_backendHandle)
259  {
261  [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_Acquire(other.m_backendHandle); });
262  }
263  }
264 
265  m_backendHandle = other.m_backendHandle;
266 
267  return *this;
268 }
269 
270 inline Binning::Binning(Binning&& other) noexcept
271 {
272  *this = std::move(other);
273 }
274 
275 inline Binning& Binning::operator=(Binning&& other) noexcept
276 {
277  if (this != &other)
278  {
279  (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_Destruct(m_backendHandle);
280  m_backendHandle = other.m_backendHandle;
281  other.m_backendHandle = nullptr;
282  }
283 
284  return *this;
285 }
286 
287 inline void Binning::SetBinningX(uint8_t value)
288 {
289  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_SetBinningX(m_backendHandle, &value); });
290 }
291 
292 inline void Binning::SetBinningY(uint8_t value)
293 {
294  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_SetBinningY(m_backendHandle, &value); });
295 }
296 
297 inline uint8_t Binning::BinningX() const
298 {
299  uint8_t value;
300 
301  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningX(m_backendHandle, &value); });
302 
303  return value;
304 }
305 
306 inline uint8_t Binning::BinningY() const
307 {
308  uint8_t value;
309 
310  ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningY(m_backendHandle, &value); });
311 
312  return value;
313 }
314 
315 inline uint8_t Binning::BinningMin() const
316 {
317  uint8_t value;
318 
320  [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningMin(m_backendHandle, &value); });
321 
322  return value;
323 }
324 
325 inline uint8_t Binning::BinningMax() const
326 {
327  uint8_t value;
328 
330  [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_GetBinningMax(m_backendHandle, &value); });
331 
332  return value;
333 }
334 
335 inline Size2D Binning::ExpectedOutputSize(Size2D inputSize, PixelFormatName pixelFormat) const
336 {
337  Size2D size{};
339  return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Binning_ExpectedOutputSize(m_backendHandle, &size.width, &size.height,
340  inputSize.width, inputSize.height, static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormat));
341  });
342 
343  return size;
344 }
345 
346 inline bool Binning::IsPixelFormatSupported(PixelFormatName pixelFormatName) const
347 {
348  PEAK_IPL_BOOL8 isPixelFormatSupported = 0;
349 
352  static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormatName),
353  reinterpret_cast<PEAK_IPL_BOOL8*>(&isPixelFormatSupported));
354  });
355 
356  return isPixelFormatSupported > 0;
357 }
358 
359 inline Image Binning::Process(const Image& inputImage) const
360 {
361  PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
364  m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage), &outputImageHandle);
365  });
366 
367  return ImageBackendAccessor::CreateImage(outputImageHandle);
368 }
369 
371 {
374  m_backendHandle, reinterpret_cast<PEAK_IPL_BINNINGMODE*>(&mode));
375  });
376 }
377 
379 {
380  BinningMode value;
381 
384  m_backendHandle, reinterpret_cast<PEAK_IPL_BINNINGMODE*>(&value));
385  });
386 
387  return value;
388 }
389 
390 
391 } /* namespace ipl */
392 } /* namespace peak */
#define PEAK_IPL_NO_DISCARD
Definition: peak_ipl_backend.h:26
PEAK_IPL_NO_DISCARD uint8_t BinningX() const
Returns the value of the binning in horizontal direction.
Definition: peak_ipl_binning.hpp:297
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
Height of size.
Definition: peak_ipl_simple_types.hpp:203
PixelFormatName
Enum holding the possible pixel format names.
Definition: peak_ipl_simple_types.hpp:38
Definition: peak_ipl_binning.hpp:27
Binning & operator=(const Binning &other)
Copy assigment for Binning instance.
Definition: peak_ipl_binning.hpp:249
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
PEAK_IPL_NO_DISCARD uint8_t BinningY() const
Returns the value of the binning in vertical direction.
Definition: peak_ipl_binning.hpp:306
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:200
Stores the pixel format, width and height of an image and the pointer to the image buffer...
Definition: peak_ipl_image.hpp:39
PEAK_IPL_NO_DISCARD Image Process(const Image &inputImage) const
Applies the binning on the given image.
Definition: peak_ipl_binning.hpp:359
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition: peak_ipl_backend.h:354
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:292
int8_t PEAK_IPL_BOOL8
Definition: peak_ipl_backend.h:41
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningY(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningYValue)
Returns the value of binning in vertical direction.
PEAK_IPL_NO_DISCARD 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:335
BinningMode
Mode parameter for the binning algorithm.
Definition: peak_ipl_binning.hpp:35
PEAK_IPL_NO_DISCARD bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const
Returns whether the binning supports the given pixel format.
Definition: peak_ipl_binning.hpp:346
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:287
PEAK_IPL_C_API PEAK_IPL_Binning_GetBinningX(PEAK_IPL_BINNING_HANDLE binningHandle, uint8_t *binningXValue)
Returns the value of binning in horizontal direction.
PEAK_IPL_C_API PEAK_IPL_Binning_Acquire(PEAK_IPL_BINNING_HANDLE binningHandle)
Increase the reference count of a binning object.
~Binning()
Destructor for the Binning instance.
Definition: peak_ipl_binning.hpp:231
PEAK_IPL_NO_DISCARD uint8_t BinningMin() const
Returns the minimum value for the binning.
Definition: peak_ipl_binning.hpp:315
size_t width
Width of size.
Definition: peak_ipl_simple_types.hpp:202
Binning()
Constructor for a new Binning instance.
Definition: peak_ipl_binning.hpp:226
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.
PEAK_IPL_NO_DISCARD uint8_t BinningMax() const
Returns the maximum value for the binning.
Definition: peak_ipl_binning.hpp:325
PEAK_IPL_NO_DISCARD BinningMode Mode() const
Returns the value of the binning mode.
Definition: peak_ipl_binning.hpp:378
struct PEAK_IPL_BINNING * PEAK_IPL_BINNING_HANDLE
Definition: peak_ipl_backend.h:334
void SetMode(BinningMode mode)
Sets the values of the binning mode.
Definition: peak_ipl_binning.hpp:370