IDS peak IPL v1.13.0
Loading...
Searching...
No Matches
peak_ipl_image_converter.hpp
Go to the documentation of this file.
1
11#pragma once
12
17
18#include <cstdint>
19#include <utility>
20#include <vector>
21
25namespace peak
26{
27namespace ipl
28{
29
30class Image;
31
46class ImageConverter final
47{
48public:
56
64
76 ImageConverter(const ImageConverter& other);
77
90
99 ImageConverter(ImageConverter&& other) noexcept;
100
109 ImageConverter& operator=(ImageConverter&& other) noexcept;
110
125 ImageConverter(const peak::ipl::PixelFormat& inputPixelFormat,
126 const peak::ipl::PixelFormat& outputPixelFormat, size_t width, size_t height, size_t imageCount = 5);
127
141 void PreAllocateConversion(const peak::ipl::PixelFormat& inputPixelFormat,
142 const peak::ipl::PixelFormat& outputPixelFormat, size_t width, size_t height, size_t imageCount = 5);
143
154
164 void SetConversionMode(peak::ipl::ConversionMode conversionMode);
165
177 PEAK_IPL_NO_DISCARD std::vector<peak::ipl::PixelFormatName> SupportedOutputPixelFormatNames(
178 const peak::ipl::PixelFormat& inputPixelFormat) const;
179
192 PEAK_IPL_NO_DISCARD Image Convert(const Image& inputImage, const peak::ipl::PixelFormat& outputPixelFormat) const;
193
209 Image Convert(const Image& inputImage, const peak::ipl::PixelFormat& outputPixelFormat,
210 uint8_t* outputImageBuffer, size_t outputImageBufferSize) const;
211
212private:
213 PEAK_IPL_IMAGE_CONVERTER_HANDLE m_backendHandle{};
214};
215
216} /* namespace ipl */
217} /* namespace peak */
218
220
221namespace peak
222{
223namespace ipl
224{
225
230
232 const peak::ipl::PixelFormat& outputPixelFormat, const size_t width, const size_t height, const size_t imageCount)
233{
235 PreAllocateConversion(inputPixelFormat, outputPixelFormat, width, height, imageCount);
236}
237
239{
240 if (m_backendHandle)
241 {
243 }
244}
245
247{
248 if (other.m_backendHandle)
249 {
251 }
252
253 m_backendHandle = other.m_backendHandle;
254}
255
257{
258 if (this != &other)
259 {
260 if (m_backendHandle)
261 {
263 }
264
265 if (other.m_backendHandle)
266 {
268 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_ImageConverter_Acquire(other.m_backendHandle); });
269 }
270 }
271
272 m_backendHandle = other.m_backendHandle;
273
274 return *this;
275}
276
278{
279 *this = std::move(other);
280}
281
283{
284 if (this != &other)
285 {
286 if (m_backendHandle != nullptr)
287 {
289 }
290
291 m_backendHandle = other.m_backendHandle;
292 other.m_backendHandle = nullptr;
293 }
294
295 return *this;
296}
297
299 const peak::ipl::PixelFormat& outputPixelFormat, const size_t width, const size_t height,
300 const size_t imageCount)
301{
304 static_cast<PEAK_IPL_PIXEL_FORMAT>(inputPixelFormat.PixelFormatName()),
305 static_cast<PEAK_IPL_PIXEL_FORMAT>(outputPixelFormat.PixelFormatName()), width, height, imageCount);
306 });
307}
308
310{
312
315 m_backendHandle, reinterpret_cast<PEAK_IPL_CONVERSION_MODE*>(&conversionMode));
316 });
317
318 return conversionMode;
319}
320
322{
325 m_backendHandle, static_cast<PEAK_IPL_CONVERSION_MODE>(conversionMode));
326 });
327}
328
329inline std::vector<PixelFormatName> ImageConverter::SupportedOutputPixelFormatNames(
330 const PixelFormat& inputPixelFormat) const
331{
332 size_t size = 0;
335 m_backendHandle, static_cast<PEAK_IPL_PIXEL_FORMAT>(inputPixelFormat.PixelFormatName()), nullptr, &size);
336 });
337 std::vector<PixelFormatName> supportedOutputPixelFormats(size);
340 static_cast<PEAK_IPL_PIXEL_FORMAT>(inputPixelFormat.PixelFormatName()),
341 reinterpret_cast<PEAK_IPL_PIXEL_FORMAT*>(supportedOutputPixelFormats.data()), &size);
342 });
343
344 return supportedOutputPixelFormats;
345}
346
347inline Image ImageConverter::Convert(const Image& inputImage, const PixelFormat& outputPixelFormat) const
348{
349 PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
352 ImageBackendAccessor::BackendHandle(inputImage),
353 static_cast<PEAK_IPL_PIXEL_FORMAT>(outputPixelFormat.PixelFormatName()), &outputImageHandle);
354 });
355
356 return ImageBackendAccessor::CreateImage(outputImageHandle);
357}
358
359inline Image ImageConverter::Convert(const Image& inputImage, const PixelFormat& outputPixelFormat,
360 uint8_t* outputImageBuffer, size_t outputImageBufferSize) const
361{
362 PEAK_IPL_IMAGE_HANDLE outputImageHandle = nullptr;
365 ImageBackendAccessor::BackendHandle(inputImage),
366 static_cast<PEAK_IPL_PIXEL_FORMAT>(outputPixelFormat.PixelFormatName()), outputImageBuffer,
367 outputImageBufferSize, &outputImageHandle);
368 });
369
370 return ImageBackendAccessor::CreateImage(outputImageHandle);
371}
372
373} /* namespace ipl */
374} /* namespace peak */
Converts images from one PixelFormat to another.
Definition peak_ipl_image_converter.hpp:47
peak::ipl::ConversionMode ConversionMode() const
Returns the current conversion mode.
Definition peak_ipl_image_converter.hpp:309
~ImageConverter()
Destructor for the ImageConverter instance.
Definition peak_ipl_image_converter.hpp:238
ImageConverter & operator=(const ImageConverter &other)
Copy assigment for ImageConverter instance.
Definition peak_ipl_image_converter.hpp:256
Image Convert(const Image &inputImage, const peak::ipl::PixelFormat &outputPixelFormat) const
Converts the input image converted to the given pixel format.
Definition peak_ipl_image_converter.hpp:347
ImageConverter()
Constructor for a new ImageConverter instance.
Definition peak_ipl_image_converter.hpp:226
void PreAllocateConversion(const peak::ipl::PixelFormat &inputPixelFormat, const peak::ipl::PixelFormat &outputPixelFormat, size_t width, size_t height, size_t imageCount=5)
Pre-allocate buffer pools needed for the specified conversion.
Definition peak_ipl_image_converter.hpp:298
void SetConversionMode(peak::ipl::ConversionMode conversionMode)
Set conversion mode.
Definition peak_ipl_image_converter.hpp:321
std::vector< peak::ipl::PixelFormatName > SupportedOutputPixelFormatNames(const peak::ipl::PixelFormat &inputPixelFormat) const
Returns the supported output pixel formats for a given input pixel format.
Definition peak_ipl_image_converter.hpp:329
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:40
Represents a pixel format and its specific properties.
Definition peak_ipl_pixel_format.hpp:32
peak::ipl::PixelFormatName PixelFormatName() const
Returns the name of the pixel format as enum value.
Definition peak_ipl_pixel_format.hpp:122
ConversionMode
Enum holding the possible conversion modes.
Definition peak_ipl_simple_types.hpp:29
@ Fast
Fast conversion mode.
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_ImageConverter_GetSupportedOutputPixelFormats(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle, PEAK_IPL_PIXEL_FORMAT inputPixelFormat, PEAK_IPL_PIXEL_FORMAT *outputPixelFormats, size_t *outputPixelFormatsSize)
Queries the supported output pixel formats for a given input pixel format.
PEAK_IPL_C_API PEAK_IPL_ImageConverter_Convert(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle, PEAK_IPL_IMAGE_HANDLE inputImageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Creates a new image containing the data of the input image converted to the given pixel format.
PEAK_IPL_C_API PEAK_IPL_ImageConverter_Construct(PEAK_IPL_IMAGE_CONVERTER_HANDLE *imageConverterHandle)
Creates an image converter.
PEAK_IPL_C_API PEAK_IPL_ImageConverter_Acquire(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle)
Increase the reference count of an image converter.
int32_t PEAK_IPL_CONVERSION_MODE
Definition peak_ipl_backend.h:70
PEAK_IPL_C_API PEAK_IPL_ImageConverter_ConvertToBuffer(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle, PEAK_IPL_IMAGE_HANDLE inputImageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, uint8_t *outputImageBuffer, size_t outputImageBufferSize, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Creates a new image containing the data of the input image converted to the given pixel format.
PEAK_IPL_C_API PEAK_IPL_ImageConverter_PreAllocateConversion(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle, PEAK_IPL_PIXEL_FORMAT inputPixelFormat, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, size_t width, size_t height, size_t imageCount)
Pre-allocates internal buffer pools for the specified conversion.
PEAK_IPL_C_API PEAK_IPL_ImageConverter_SetConversionMode(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle, PEAK_IPL_CONVERSION_MODE conversionMode)
Sets the given image converter's conversion mode.
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition peak_ipl_backend.h:369
PEAK_IPL_C_API PEAK_IPL_ImageConverter_Destruct(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle)
Destroys the image converter associated with the given handle.
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_backend.h:26
int32_t PEAK_IPL_PIXEL_FORMAT
Definition peak_ipl_backend.h:188
struct PEAK_IPL_IMAGE_CONVERTER * PEAK_IPL_IMAGE_CONVERTER_HANDLE
Definition peak_ipl_backend.h:337
PEAK_IPL_C_API PEAK_IPL_ImageConverter_GetConversionMode(PEAK_IPL_IMAGE_CONVERTER_HANDLE imageConverterHandle, PEAK_IPL_CONVERSION_MODE *conversionMode)
Queries the given image converter's current conversion mode.
#define PEAK_IPL_C_ABI_PREFIX
Definition peak_ipl_dll_defines.h:16