IDS peak IPL v1.17.0
Loading...
Searching...
No Matches
peak_ipl_lut.hpp
Go to the documentation of this file.
1
10
11#pragma once
12
18
23
24namespace peak
25{
26namespace ipl
27{
28
29class Image;
30
49class Lut final
50{
51public:
55 enum class Channel
56 {
58 Red = 0,
60 Green = 1,
62 Blue = 2,
64 All = 3
65 };
66
71 enum class Selector
72 {
81 };
82
145
152 Lut();
153
160 ~Lut();
161
172 Lut(const Lut& other);
173
184 Lut& operator=(const Lut& other);
185
194 Lut(Lut&& other) noexcept;
195
204 Lut& operator=(Lut&& other) noexcept;
205
217 PEAK_IPL_NO_DISCARD uint32_t LutValue(Selector selector, Channel channel, uint32_t index) const;
218
231 void SetLutValue(Selector selector, Channel channel, uint32_t index, uint32_t value);
232
245 PEAK_IPL_NO_DISCARD std::vector<uint32_t> AllLutValues(Selector selector, Channel channel) const;
246
258 void SetAllLutValues(Selector selector, Channel channel, const std::vector<uint32_t>& values);
259
268 void SetLutPreset(Selector selector, Preset preset);
269
280
292 void ProcessInPlace(Image& image) const;
293
306 PEAK_IPL_NO_DISCARD Image Process(const Image& inputImage) const;
307
308private:
309 PEAK_IPL_LUT_HANDLE m_backendHandle{};
310};
311
312inline Lut::Lut()
313{
315}
316
317inline Lut::~Lut()
318{
319 if (m_backendHandle)
320 {
321 (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Lut_Destruct(m_backendHandle);
322 }
323}
324
325inline Lut::Lut(Lut&& other) noexcept
326{
327 *this = std::move(other);
328}
329
330inline Lut::Lut(const Lut& other)
331{
332 if (other.m_backendHandle)
333 {
334 ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Lut_Acquire(other.m_backendHandle); });
335 }
336
337 m_backendHandle = other.m_backendHandle;
338}
339
340inline Lut& Lut::operator=(const Lut& other)
341{
342 if (this != &other)
343 {
344 if (m_backendHandle)
345 {
346 (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Lut_Destruct(m_backendHandle);
347 }
348
349 if (other.m_backendHandle)
350 {
352 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Lut_Acquire(other.m_backendHandle); });
353 }
354 }
355
356 m_backendHandle = other.m_backendHandle;
357
358 return *this;
359}
360
361inline Lut& Lut::operator=(Lut&& other) noexcept
362{
363 if (this != &other)
364 {
365 if (m_backendHandle != nullptr)
366 {
367 (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Lut_Destruct(m_backendHandle);
368 }
369 m_backendHandle = other.m_backendHandle;
370 other.m_backendHandle = nullptr;
371 }
372
373 return *this;
374}
375
376inline uint32_t Lut::LutValue(Selector selector, Channel channel, uint32_t index) const
377{
378 uint32_t value = 0;
379
382 m_backendHandle, static_cast<PEAK_IPL_LUT_SELECTOR>(selector), static_cast<PEAK_IPL_LUT_CHANNEL>(channel), index, &value);
383 });
384
385 return value;
386}
387
388inline void Lut::SetLutValue(Selector selector, Channel channel, uint32_t index, uint32_t value)
389{
391 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Lut_SetLutValue(m_backendHandle,
392 static_cast<PEAK_IPL_LUT_SELECTOR>(selector), static_cast<PEAK_IPL_LUT_CHANNEL>(channel), index, value);
393 });
394}
395
396inline std::vector<uint32_t> Lut::AllLutValues(Selector selector, Channel channel) const
397{
398 size_t numLutValues = 0;
399
402 static_cast<PEAK_IPL_LUT_SELECTOR>(selector), static_cast<PEAK_IPL_LUT_CHANNEL>(channel), nullptr, &numLutValues);
403 });
404
405 std::vector<uint32_t> vector(numLutValues);
406
409 static_cast<PEAK_IPL_LUT_SELECTOR>(selector), static_cast<PEAK_IPL_LUT_CHANNEL>(channel),
410 reinterpret_cast<uint32_t*>(vector.data()), &numLutValues);
411 });
412
413 return vector;
414}
415
416inline void Lut::SetAllLutValues(Selector selector, Channel channel, const std::vector<uint32_t>& vector)
417{
420 static_cast<PEAK_IPL_LUT_SELECTOR>(selector), static_cast<PEAK_IPL_LUT_CHANNEL>(channel),
421 reinterpret_cast<const uint32_t*>(vector.data()), vector.size());
422 });
423}
424
425inline void Lut::SetLutPreset(Selector selector, Preset preset)
426{
429 m_backendHandle, static_cast<PEAK_IPL_LUT_SELECTOR>(selector), static_cast<PEAK_IPL_LUT_PRESET>(preset));
430 });
431}
432
433inline bool Lut::IsPixelFormatSupported(PixelFormatName pixelFormatName) const
434{
435 PEAK_IPL_BOOL8 isPixelFormatSupported = 0;
436
439 static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormatName),
440 reinterpret_cast<PEAK_IPL_BOOL8*>(&isPixelFormatSupported));
441 });
442
443 return isPixelFormatSupported > 0;
444}
445
446inline void Lut::ProcessInPlace(Image& image) const
447{
450 m_backendHandle, ImageBackendAccessor::BackendHandle(image));
451 });
452}
453
454inline Image Lut::Process(const Image& inputImage) const
455{
456 PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
459 m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage), &outputImageHandle);
460 });
461
462 return ImageBackendAccessor::CreateImage(outputImageHandle);
463}
464
465} /* namespace ipl */
466} /* namespace peak */
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:46
Applies a LUT to the input image data.
Definition peak_ipl_lut.hpp:50
void ProcessInPlace(Image &image) const
Applies the LUT to the given image in place that is, it will change the input image.
Definition peak_ipl_lut.hpp:446
void SetLutValue(Selector selector, Channel channel, uint32_t index, uint32_t value)
Sets a single LUT value for a given selector and channel at an indexed position.
Definition peak_ipl_lut.hpp:388
bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const
Returns whether the LUT supports the given pixel format.
Definition peak_ipl_lut.hpp:433
uint32_t LutValue(Selector selector, Channel channel, uint32_t index) const
Reads a single LUT value for a given selector and channel at an indexed position.
Definition peak_ipl_lut.hpp:376
Channel
Channel parameter to select the channel where the operation is applied.
Definition peak_ipl_lut.hpp:56
@ Blue
Definition peak_ipl_lut.hpp:62
@ All
Definition peak_ipl_lut.hpp:64
@ Green
Definition peak_ipl_lut.hpp:60
@ Red
Definition peak_ipl_lut.hpp:58
void SetLutPreset(Selector selector, Preset preset)
Applies the given preset (identity, inverse, ...) to the specified LUT.
Definition peak_ipl_lut.hpp:425
Image Process(const Image &inputImage) const
Applies the LUT to the given image.
Definition peak_ipl_lut.hpp:454
~Lut()
Destructor for the LUT instance.
Definition peak_ipl_lut.hpp:317
std::vector< uint32_t > AllLutValues(Selector selector, Channel channel) const
Reads all LUT values for a given selector and channel at once.
Definition peak_ipl_lut.hpp:396
void SetAllLutValues(Selector selector, Channel channel, const std::vector< uint32_t > &values)
Sets all LUT values for a given selector and channel at once.
Definition peak_ipl_lut.hpp:416
Selector
Selector parameter to select to which LUT the operation is applied (8/10/12/16 bit LUT)....
Definition peak_ipl_lut.hpp:72
@ Lut_10Bit
Definition peak_ipl_lut.hpp:76
@ Lut_16Bit
Definition peak_ipl_lut.hpp:80
@ Lut_8Bit
Definition peak_ipl_lut.hpp:74
@ Lut_12Bit
Definition peak_ipl_lut.hpp:78
Preset
Preset Selects a predefined LUT.
Definition peak_ipl_lut.hpp:87
@ Jet
Definition peak_ipl_lut.hpp:103
@ Hot
Definition peak_ipl_lut.hpp:109
@ Rainbow
Definition peak_ipl_lut.hpp:115
@ DigitalBlack25Percent
Definition peak_ipl_lut.hpp:138
@ OnlyRed
Definition peak_ipl_lut.hpp:120
@ Binarize
Definition peak_ipl_lut.hpp:143
@ DigitalGain2
Definition peak_ipl_lut.hpp:134
@ OnlyBlue
Definition peak_ipl_lut.hpp:130
@ Inverse
Definition peak_ipl_lut.hpp:97
@ Identity
Definition peak_ipl_lut.hpp:92
@ OnlyGreen
Definition peak_ipl_lut.hpp:125
Lut & operator=(const Lut &other)
Copy assigment for LUT instance.
Definition peak_ipl_lut.hpp:340
Lut()
Constructor for a new LUT instance.
Definition peak_ipl_lut.hpp:312
The "peak::ipl" namespace contains the whole image processing library.
PixelFormatName
Enum holding the possible pixel format names.
Definition peak_ipl_simple_types.hpp:41
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:271
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_attribute_defines.h:25
PEAK_IPL_C_API PEAK_IPL_Lut_GetAllLutValues(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_LUT_SELECTOR lutSelector, PEAK_IPL_LUT_CHANNEL channel, uint32_t *values, size_t *sizeValues)
Returns all lut values at once in an array.
PEAK_IPL_C_API PEAK_IPL_Lut_SetLutPreset(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_LUT_SELECTOR lutSelector, PEAK_IPL_LUT_PRESET preset)
Sets the lut to a preset (identity, inverse, ...)
int32_t PEAK_IPL_LUT_PRESET
Definition peak_ipl_backend.h:352
PEAK_IPL_C_API PEAK_IPL_Lut_SetLutValue(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_LUT_SELECTOR lutSelector, PEAK_IPL_LUT_CHANNEL channel, uint32_t index, uint32_t value)
Sets a value in the lut.
int32_t PEAK_IPL_LUT_SELECTOR
Definition peak_ipl_backend.h:336
PEAK_IPL_C_API PEAK_IPL_Lut_Destruct(PEAK_IPL_LUT_HANDLE lutHandle)
Destroys the lut associated with the given handle.
PEAK_IPL_C_API PEAK_IPL_Lut_GetLutValue(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_LUT_SELECTOR lutSelector, PEAK_IPL_LUT_CHANNEL channel, uint32_t index, uint32_t *value)
Returns a lut value at the indexed position.
PEAK_IPL_C_API PEAK_IPL_Lut_Acquire(PEAK_IPL_LUT_HANDLE lutHandle)
Increase the reference count of a lut object.
PEAK_IPL_C_API PEAK_IPL_Lut_Process(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Applies the lut to the given image.
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition peak_ipl_backend.h:405
struct PEAK_IPL_LUT * PEAK_IPL_LUT_HANDLE
Definition peak_ipl_backend.h:429
PEAK_IPL_C_API PEAK_IPL_Lut_SetAllLutValues(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_LUT_SELECTOR lutSelector, PEAK_IPL_LUT_CHANNEL channel, const uint32_t *values, size_t sizeValues)
Sets all lut values at once over an array.
PEAK_IPL_C_API PEAK_IPL_Lut_IsPixelFormatSupported(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_PIXEL_FORMAT pixelFormat, PEAK_IPL_BOOL8 *isPixelFormatSupported)
Asks the given lut whether it supports the given pixel format.
PEAK_IPL_C_API PEAK_IPL_Lut_Construct(PEAK_IPL_LUT_HANDLE *lutHandle)
Creates a lut.
int8_t PEAK_IPL_BOOL8
Definition peak_ipl_backend.h:26
PEAK_IPL_C_API PEAK_IPL_Lut_ProcessInPlace(PEAK_IPL_LUT_HANDLE lutHandle, PEAK_IPL_IMAGE_HANDLE imageHandle)
Applies lut to the given image inplace.
int32_t PEAK_IPL_LUT_CHANNEL
Definition peak_ipl_backend.h:327
int32_t PEAK_IPL_PIXEL_FORMAT
Definition peak_ipl_backend.h:173
#define PEAK_IPL_C_ABI_PREFIX
Definition peak_ipl_dll_defines.h:16