IDS peak IPL v1.17.1
Loading...
Searching...
No Matches
peak_ipl_decimation.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
18
23
24namespace peak
25{
26namespace ipl
27{
28
41class Decimation final
42{
43public:
50 Decimation();
51
59
71 Decimation(const Decimation& other);
72
84 Decimation& operator=(const Decimation& other);
85
94 Decimation(Decimation&& other) noexcept;
95
104 Decimation& operator=(Decimation&& other) noexcept;
105
115 void SetDecimationX(uint8_t value);
116
124 PEAK_IPL_NO_DISCARD uint8_t DecimationX() const;
125
135 void SetDecimationY(uint8_t value);
136
144 PEAK_IPL_NO_DISCARD uint8_t DecimationY() const;
145
153 PEAK_IPL_NO_DISCARD uint8_t DecimationMin() const;
161 PEAK_IPL_NO_DISCARD uint8_t DecimationMax() const;
162
176
187
201 PEAK_IPL_NO_DISCARD Image Process(const Image& inputImage) const;
202
203private:
204 PEAK_IPL_DECIMATION_HANDLE m_backendHandle{};
205};
206
211
213{
214 if (m_backendHandle)
215 {
217 }
218}
219
221{
222 if (other.m_backendHandle)
223 {
224 ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_Acquire(other.m_backendHandle); });
225 }
226
227 m_backendHandle = other.m_backendHandle;
228}
229
231{
232 if (this != &other)
233 {
234 if (m_backendHandle)
235 {
237 }
238
239 if (other.m_backendHandle)
240 {
242 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_Acquire(other.m_backendHandle); });
243 }
244 }
245
246 m_backendHandle = other.m_backendHandle;
247
248 return *this;
249}
250
251inline Decimation::Decimation(Decimation&& other) noexcept
252{
253 *this = std::move(other);
254}
255
257{
258 if (this != &other)
259 {
260 if (m_backendHandle != nullptr)
261 {
263 }
264
265 m_backendHandle = other.m_backendHandle;
266 other.m_backendHandle = nullptr;
267 }
268
269 return *this;
270}
271
272inline void Decimation::SetDecimationX(uint8_t value)
273{
275 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_SetDecimationX(m_backendHandle, &value); });
276}
277
278inline void Decimation::SetDecimationY(uint8_t value)
279{
281 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_SetDecimationY(m_backendHandle, &value); });
282}
283
284inline uint8_t Decimation::DecimationX() const
285{
286 uint8_t value;
287
289 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_GetDecimationX(m_backendHandle, &value); });
290
291 return value;
292}
293
294inline uint8_t Decimation::DecimationY() const
295{
296 uint8_t value;
297
299 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_GetDecimationY(m_backendHandle, &value); });
300
301 return value;
302}
303
304inline uint8_t Decimation::DecimationMin() const
305{
306 uint8_t value;
307
309 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_GetDecimationMin(m_backendHandle, &value); });
310
311 return value;
312}
313
314inline uint8_t Decimation::DecimationMax() const
315{
316 uint8_t value;
317
319 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Decimation_GetDecimationMax(m_backendHandle, &value); });
320
321 return value;
322}
323
325{
326 Size2D size{};
329 inputSize.width, inputSize.height, static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormat));
330 });
331
332 return size;
333}
334
335inline bool Decimation::IsPixelFormatSupported(PixelFormatName pixelFormatName) const
336{
337 PEAK_IPL_BOOL8 isPixelFormatSupported = 0;
338
341 static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormatName),
342 reinterpret_cast<PEAK_IPL_BOOL8*>(&isPixelFormatSupported));
343 });
344
345 return isPixelFormatSupported > 0;
346}
347
348inline Image Decimation::Process(const Image& inputImage) const
349{
350 PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
353 m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage), &outputImageHandle);
354 });
355
356 return ImageBackendAccessor::CreateImage(outputImageHandle);
357}
358
359} /* namespace ipl */
360} /* namespace peak */
uint8_t DecimationY() const
Returns the value of the decimation in vertical direction.
Definition peak_ipl_decimation.hpp:294
Decimation & operator=(const Decimation &other)
Copy assigment for Decimation instance.
Definition peak_ipl_decimation.hpp:230
uint8_t DecimationX() const
Returns the value of the decimation in horizontal direction.
Definition peak_ipl_decimation.hpp:284
Size2D ExpectedOutputSize(Size2D inputSize, PixelFormatName pixelFormat) const
Returns the size of a decimated image given the input size and pixelformat.
Definition peak_ipl_decimation.hpp:324
uint8_t DecimationMin() const
Returns the minimum value for the decimation.
Definition peak_ipl_decimation.hpp:304
~Decimation()
Destructor for the Decimation instance.
Definition peak_ipl_decimation.hpp:212
Image Process(const Image &inputImage) const
Applies the decimation on the given image.
Definition peak_ipl_decimation.hpp:348
uint8_t DecimationMax() const
Returns the maximum value for the decimation.
Definition peak_ipl_decimation.hpp:314
void SetDecimationY(uint8_t value)
Sets the values of the decimation in vertical direction.
Definition peak_ipl_decimation.hpp:278
Decimation()
Constructor for a new Decimation instance.
Definition peak_ipl_decimation.hpp:207
bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const
Returns whether the decimation supports the given pixel format.
Definition peak_ipl_decimation.hpp:335
void SetDecimationX(uint8_t value)
Sets the values of the decimation in horizontal direction.
Definition peak_ipl_decimation.hpp:272
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:47
PixelFormatName
Enum holding the possible pixel format names.
Definition peak_ipl_simple_types.hpp:43
The "peak::ipl" namespace contains the whole image processing library.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:282
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_attribute_defines.h:25
PEAK_IPL_C_API PEAK_IPL_Decimation_SetDecimationX(PEAK_IPL_DECIMATION_HANDLE decimationHandle, uint8_t *decimationXValue)
Sets the value of decimation in horizontal direction.
PEAK_IPL_C_API PEAK_IPL_Decimation_GetDecimationMax(PEAK_IPL_DECIMATION_HANDLE decimationHandle, uint8_t *decimationMax)
Returns the maximum decimation value which can be set.
PEAK_IPL_C_API PEAK_IPL_Decimation_GetDecimationX(PEAK_IPL_DECIMATION_HANDLE decimationHandle, uint8_t *decimationXValue)
Returns the value of decimation in horizontal direction.
PEAK_IPL_C_API PEAK_IPL_Decimation_Construct(PEAK_IPL_DECIMATION_HANDLE *decimationHandle)
Creates a decimation.
PEAK_IPL_C_API PEAK_IPL_Decimation_Process(PEAK_IPL_DECIMATION_HANDLE decimationHandle, PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Apply the decimation on the given image.
PEAK_IPL_C_API PEAK_IPL_Decimation_IsPixelformatSupported(PEAK_IPL_DECIMATION_HANDLE decimationHandle, PEAK_IPL_PIXEL_FORMAT pixelFormat, PEAK_IPL_BOOL8 *isPixelFormatSupported)
Asks the given decimation whether it supports the given pixel format.
PEAK_IPL_C_API PEAK_IPL_Decimation_SetDecimationY(PEAK_IPL_DECIMATION_HANDLE decimationHandle, uint8_t *decimationYValue)
Sets the value of decimation in vertical direction.
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition peak_ipl_backend.h:405
PEAK_IPL_C_API PEAK_IPL_Decimation_Acquire(PEAK_IPL_DECIMATION_HANDLE decimationHandle)
Increase the reference count of a decimation object.
int8_t PEAK_IPL_BOOL8
Definition peak_ipl_backend.h:26
int32_t PEAK_IPL_PIXEL_FORMAT
Definition peak_ipl_backend.h:173
PEAK_IPL_C_API PEAK_IPL_Decimation_GetDecimationY(PEAK_IPL_DECIMATION_HANDLE decimationHandle, uint8_t *decimationYValue)
Returns the value of decimation in vertical direction.
PEAK_IPL_C_API PEAK_IPL_Decimation_Destruct(PEAK_IPL_DECIMATION_HANDLE decimationHandle)
Destroys the decimation associated with the given handle.
PEAK_IPL_C_API PEAK_IPL_Decimation_GetDecimationMin(PEAK_IPL_DECIMATION_HANDLE decimationHandle, uint8_t *decimationMin)
Returns the minimum decimation value which can be set.
struct PEAK_IPL_DECIMATION * PEAK_IPL_DECIMATION_HANDLE
Definition peak_ipl_backend.h:389
PEAK_IPL_C_API PEAK_IPL_Decimation_ExpectedOutputSize(PEAK_IPL_DECIMATION_HANDLE decimationHandle, 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.
#define PEAK_IPL_C_ABI_PREFIX
Definition peak_ipl_dll_defines.h:16
2D size of an image.
Definition peak_ipl_simple_types.hpp:225
size_t height
Height of size.
Definition peak_ipl_simple_types.hpp:227
size_t width
Width of size.
Definition peak_ipl_simple_types.hpp:226