IDS peak IPL v1.11.0
Loading...
Searching...
No Matches
peak_ipl_gain.hpp
Go to the documentation of this file.
1
11#pragma once
12
18
19namespace
20{
21class GainBackendAccessor;
22}
23
27namespace peak
28{
29namespace ipl
30{
31
35class Gain final
36{
37public:
44 Gain();
45
52 ~Gain();
53
65 Gain(const Gain& other);
66
78 Gain& operator=(const Gain& other);
79
88 Gain(Gain&& other) noexcept;
89
98 Gain& operator=(Gain&& other) noexcept;
99
109 void SetMasterGainValue(float masterGainValue);
110
119
128
137
147 void SetRedGainValue(float redGainValue);
148
156 PEAK_IPL_NO_DISCARD float RedGainValue() const;
157
165 PEAK_IPL_NO_DISCARD float RedGainMin() const;
166
174 PEAK_IPL_NO_DISCARD float RedGainMax() const;
175
185 void SetGreenGainValue(float greenGainValue);
186
195
203 PEAK_IPL_NO_DISCARD float GreenGainMin() const;
204
212 PEAK_IPL_NO_DISCARD float GreenGainMax() const;
213
223 void SetBlueGainValue(float blueGainValue);
224
233
241 PEAK_IPL_NO_DISCARD float BlueGainMin() const;
242
250 PEAK_IPL_NO_DISCARD float BlueGainMax() const;
251
262
272 void ProcessInPlace(Image& image) const;
273
284 PEAK_IPL_NO_DISCARD Image Process(const Image& inputImage) const;
285
286private:
287 friend GainBackendAccessor;
288 explicit Gain(PEAK_IPL_GAIN_HANDLE gainHandle) noexcept;
289 PEAK_IPL_GAIN_HANDLE m_backendHandle{};
290};
291
292} /* namespace ipl */
293} /* namespace peak */
294
295namespace
296{
297
299class GainBackendAccessor
300{
301public:
309 static PEAK_IPL_GAIN_HANDLE BackendHandle(const peak::ipl::Gain& gain)
310 {
311 return gain.m_backendHandle;
312 }
313
323 static peak::ipl::Gain CreateGain(PEAK_IPL_GAIN_HANDLE gainHandle)
324 {
325 return peak::ipl::Gain(gainHandle);
326 }
327};
328
329} /* namespace */
330
331namespace peak
332{
333namespace ipl
334{
336{
338}
339
340inline Gain::Gain(PEAK_IPL_GAIN_HANDLE gainHandle) noexcept
341 : m_backendHandle{ gainHandle }
342{
344}
345
347{
348 if (m_backendHandle)
349 {
350 (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_Destruct(m_backendHandle);
351 }
352}
353
354inline Gain::Gain(Gain&& other) noexcept
355{
356 *this = std::move(other);
357}
358
359inline Gain::Gain(const Gain& other)
360{
361 if (other.m_backendHandle)
362 {
363 ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_Acquire(other.m_backendHandle); });
364 }
365
366 m_backendHandle = other.m_backendHandle;
367}
368
369inline Gain& Gain::operator=(const Gain& other)
370{
371 if (this != &other)
372 {
373 if (m_backendHandle)
374 {
375 (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_Destruct(m_backendHandle);
376 }
377
378 if (other.m_backendHandle)
379 {
380 ExecuteAndMapReturnCodes([&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_Acquire(other.m_backendHandle); });
381 }
382 }
383
384 m_backendHandle = other.m_backendHandle;
385
386 return *this;
387}
388
389inline Gain& Gain::operator=(Gain&& other) noexcept
390{
391 if (this != &other)
392 {
393 if (m_backendHandle != nullptr)
394 {
395 (void)PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_Destruct(m_backendHandle);
396 }
397
398 m_backendHandle = other.m_backendHandle;
399 other.m_backendHandle = nullptr;
400 }
401
402 return *this;
403}
404inline void Gain::SetMasterGainValue(float masterGainValue)
405{
408 m_backendHandle, reinterpret_cast<float*>(&masterGainValue));
409 });
410}
411inline float Gain::MasterGainValue() const
412{
413 float masterGainValue;
414
417 m_backendHandle, reinterpret_cast<float*>(&masterGainValue));
418 });
419
420 return masterGainValue;
421}
422inline float Gain::MasterGainMin() const
423{
424 float masterGainMin;
425
428 m_backendHandle, reinterpret_cast<float*>(&masterGainMin));
429 });
430
431 return masterGainMin;
432}
433inline float Gain::MasterGainMax() const
434{
435 float masterGainMax;
436
439 m_backendHandle, reinterpret_cast<float*>(&masterGainMax));
440 });
441
442 return masterGainMax;
443}
444inline void Gain::SetRedGainValue(float redGainValue)
445{
448 m_backendHandle, reinterpret_cast<float*>(&redGainValue));
449 });
450}
451inline float Gain::RedGainValue() const
452{
453 float redGainValue;
454
457 m_backendHandle, reinterpret_cast<float*>(&redGainValue));
458 });
459
460 return redGainValue;
461}
462inline float Gain::RedGainMin() const
463{
464 float redGainMin;
465
467 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_GetRedGainMin(m_backendHandle, reinterpret_cast<float*>(&redGainMin));
468 });
469
470 return redGainMin;
471}
472inline float Gain::RedGainMax() const
473{
474 float redGainMax;
475
477 return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Gain_GetRedGainMax(m_backendHandle, reinterpret_cast<float*>(&redGainMax));
478 });
479
480 return redGainMax;
481}
482inline void Gain::SetGreenGainValue(float greenGainValue)
483{
486 m_backendHandle, reinterpret_cast<float*>(&greenGainValue));
487 });
488}
489inline float Gain::GreenGainValue() const
490{
491 float greenGainValue;
492
495 m_backendHandle, reinterpret_cast<float*>(&greenGainValue));
496 });
497
498 return greenGainValue;
499}
500inline float Gain::GreenGainMin() const
501{
502 float greenGainMin;
503
506 m_backendHandle, reinterpret_cast<float*>(&greenGainMin));
507 });
508
509 return greenGainMin;
510}
511inline float Gain::GreenGainMax() const
512{
513 float greenGainMax;
514
517 m_backendHandle, reinterpret_cast<float*>(&greenGainMax));
518 });
519
520 return greenGainMax;
521}
522inline void Gain::SetBlueGainValue(float blueGainValue)
523{
526 m_backendHandle, reinterpret_cast<float*>(&blueGainValue));
527 });
528}
529inline float Gain::BlueGainValue() const
530{
531 float blueGainValue;
532
535 m_backendHandle, reinterpret_cast<float*>(&blueGainValue));
536 });
537
538 return blueGainValue;
539}
540inline float Gain::BlueGainMin() const
541{
542 float blueGainMin;
543
546 m_backendHandle, reinterpret_cast<float*>(&blueGainMin));
547 });
548
549 return blueGainMin;
550}
551inline float Gain::BlueGainMax() const
552{
553 float blueGainMax;
554
557 m_backendHandle, reinterpret_cast<float*>(&blueGainMax));
558 });
559
560 return blueGainMax;
561}
562inline bool Gain::IsPixelFormatSupported(PixelFormatName pixelFormatName) const
563{
564 PEAK_IPL_BOOL8 isPixelFormatSupported = 0;
565
568 static_cast<PEAK_IPL_PIXEL_FORMAT>(pixelFormatName),
569 reinterpret_cast<PEAK_IPL_BOOL8*>(&isPixelFormatSupported));
570 });
571
572 return isPixelFormatSupported > 0;
573}
574inline void Gain::ProcessInPlace(Image& image) const
575{
578 m_backendHandle, ImageBackendAccessor::BackendHandle(image));
579 });
580}
581inline Image Gain::Process(const Image& inputImage) const
582{
583 PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
586 m_backendHandle, ImageBackendAccessor::BackendHandle(inputImage), &outputImageHandle);
587 });
588
589 return ImageBackendAccessor::CreateImage(outputImageHandle);
590}
591
592} /* namespace ipl */
593} /* namespace peak */
Applies gain to the data.
Definition peak_ipl_gain.hpp:36
float GreenGainMin() const
Returns the minimum value of the green gain.
Definition peak_ipl_gain.hpp:500
float GreenGainValue() const
Returns the value of the green gain.
Definition peak_ipl_gain.hpp:489
~Gain()
Destructor for the Gain instance.
Definition peak_ipl_gain.hpp:346
void ProcessInPlace(Image &image) const
Applies the gain on the given image in place that is, it will change the input image.
Definition peak_ipl_gain.hpp:574
float BlueGainValue() const
Returns the value of the blue gain.
Definition peak_ipl_gain.hpp:529
Image Process(const Image &inputImage) const
Applies the gain on the given image.
Definition peak_ipl_gain.hpp:581
float MasterGainMax() const
Returns the maximum value of the master gain.
Definition peak_ipl_gain.hpp:433
Gain & operator=(const Gain &other)
Copy assigment for Gain instance.
Definition peak_ipl_gain.hpp:369
float MasterGainValue() const
Returns the value of the master gain.
Definition peak_ipl_gain.hpp:411
void SetRedGainValue(float redGainValue)
Sets the values of the red Gain.
Definition peak_ipl_gain.hpp:444
float BlueGainMax() const
Returns the maximum value of the blue gain.
Definition peak_ipl_gain.hpp:551
void SetMasterGainValue(float masterGainValue)
Sets the values of the master Gain.
Definition peak_ipl_gain.hpp:404
float GreenGainMax() const
Returns the maximum value of the green gain.
Definition peak_ipl_gain.hpp:511
float RedGainMin() const
Returns the minimum value of the red gain.
Definition peak_ipl_gain.hpp:462
float BlueGainMin() const
Returns the minimum value of the blue gain.
Definition peak_ipl_gain.hpp:540
float MasterGainMin() const
Returns the minimum value of the master gain.
Definition peak_ipl_gain.hpp:422
void SetGreenGainValue(float greenGainValue)
Sets the values of the green Gain.
Definition peak_ipl_gain.hpp:482
void SetBlueGainValue(float blueGainValue)
Sets the values of the blue Gain.
Definition peak_ipl_gain.hpp:522
float RedGainValue() const
Returns the value of the red gain.
Definition peak_ipl_gain.hpp:451
bool IsPixelFormatSupported(PixelFormatName pixelFormatName) const
Returns whether the gain supports the given pixel format.
Definition peak_ipl_gain.hpp:562
float RedGainMax() const
Returns the maximum value of the red gain.
Definition peak_ipl_gain.hpp:472
Gain()
Constructor for a new Gain instance.
Definition peak_ipl_gain.hpp:335
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:40
PixelFormatName
Enum holding the possible pixel format names.
Definition peak_ipl_simple_types.hpp:39
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:182
The "peak::ipl" namespace contains the whole image processing library.
Definition peak_ipl_binning.hpp:23
PEAK_IPL_C_API PEAK_IPL_Gain_GetRedGainMin(PEAK_IPL_GAIN_HANDLE gainHandle, float *redGainMin)
Returns the minimum red gain value which can be set.
PEAK_IPL_C_API PEAK_IPL_Gain_GetIsPixelFormatSupported(PEAK_IPL_GAIN_HANDLE gainHandle, PEAK_IPL_PIXEL_FORMAT pixelFormat, PEAK_IPL_BOOL8 *isPixelFormatSupported)
Asks the given gamma corrector whether it supports the given pixel format.
PEAK_IPL_C_API PEAK_IPL_Gain_GetRedGainMax(PEAK_IPL_GAIN_HANDLE gainHandle, float *redGainMax)
Returns the maximum red gain value which can be set.
PEAK_IPL_C_API PEAK_IPL_Gain_SetBlueGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *blueGainValue)
Sets the value of the blue gain.
PEAK_IPL_C_API PEAK_IPL_Gain_GetGreenGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *greenGainValue)
Returns the green gain value.
PEAK_IPL_C_API PEAK_IPL_Gain_GetRedGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *redGainValue)
Returns the red gain value.
PEAK_IPL_C_API PEAK_IPL_Gain_SetGreenGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *greenGainValue)
Sets the value of the green gain.
PEAK_IPL_C_API PEAK_IPL_Gain_Process(PEAK_IPL_GAIN_HANDLE gainHandle, PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Apply the gain on the given image.
PEAK_IPL_C_API PEAK_IPL_Gain_GetBlueGainMax(PEAK_IPL_GAIN_HANDLE gainHandle, float *blueGainMax)
Returns the maximum blue gain value which can be set.
PEAK_IPL_C_API PEAK_IPL_Gain_GetMasterGainMax(PEAK_IPL_GAIN_HANDLE gainHandle, float *masterGainMax)
Returns the maximum master gain value which can be set.
PEAK_IPL_C_API PEAK_IPL_Gain_SetMasterGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *masterGainValue)
Sets the value of the master gain.
PEAK_IPL_C_API PEAK_IPL_Gain_GetGreenGainMax(PEAK_IPL_GAIN_HANDLE gainHandle, float *greenGainMax)
Returns the maximum green gain value which can be set.
PEAK_IPL_C_API PEAK_IPL_Gain_GetMasterGainMin(PEAK_IPL_GAIN_HANDLE gainHandle, float *masterGainMin)
Returns the minimum master gain value which can be set.
PEAK_IPL_C_API PEAK_IPL_Gain_Construct(PEAK_IPL_GAIN_HANDLE *gainHandle)
Creates a gain.
PEAK_IPL_C_API PEAK_IPL_Gain_GetBlueGainMin(PEAK_IPL_GAIN_HANDLE gainHandle, float *blueGainMin)
Returns the minimum blue gain value which can be set.
struct PEAK_IPL_GAIN * PEAK_IPL_GAIN_HANDLE
Definition peak_ipl_backend.h:353
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition peak_ipl_backend.h:361
PEAK_IPL_C_API PEAK_IPL_Gain_GetMasterGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *masterGainValue)
Returns the master gain value.
PEAK_IPL_C_API PEAK_IPL_Gain_ProcessInPlace(PEAK_IPL_GAIN_HANDLE gainHandle, PEAK_IPL_IMAGE_HANDLE imageHandle)
Apply the gain on the given image.
PEAK_IPL_C_API PEAK_IPL_Gain_Destruct(PEAK_IPL_GAIN_HANDLE gainHandle)
Destroys the gain associated with the given handle.
int8_t PEAK_IPL_BOOL8
Definition peak_ipl_backend.h:41
PEAK_IPL_C_API PEAK_IPL_Gain_GetBlueGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *blueGainValue)
Returns the blue gain value.
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_backend.h:26
int32_t PEAK_IPL_PIXEL_FORMAT
Definition peak_ipl_backend.h:180
PEAK_IPL_C_API PEAK_IPL_Gain_SetRedGainValue(PEAK_IPL_GAIN_HANDLE gainHandle, float *redGainValue)
Sets the value of the red gain.
PEAK_IPL_C_API PEAK_IPL_Gain_Acquire(PEAK_IPL_GAIN_HANDLE gainHandle)
Increase the reference count of a gain object.
PEAK_IPL_C_API PEAK_IPL_Gain_GetGreenGainMin(PEAK_IPL_GAIN_HANDLE gainHandle, float *greenGainMin)
Returns the minimum green gain value which can be set.
#define PEAK_IPL_C_ABI_PREFIX
Definition peak_ipl_dll_defines.h:16