24class ImageBackendAccessor;
86 const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height);
123 Image(
const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height, uint64_t timestamp_ns);
261 template<typename T, typename = std::enable_if_t<std::is_arithmetic<T>::value>>
317 template<typename T, typename = std::enable_if_t<std::is_arithmetic<T>::value>>
320 return reinterpret_cast<T*
>(
Data());
362 size_t outputImageBufferSize,
417 uint8_t* outputImageBuffer,
size_t outputImageBufferSize,
double factor,
double offset = 0.0,
483 template <
typename Integer1,
typename Integer2,
484 typename std::enable_if_t<std::is_integral<Integer1>::value,
int> = 0,
485 typename std::enable_if_t<std::is_integral<Integer2>::value,
int> = 0>
488 return Scale(
peak::ipl::Size2D{
static_cast<std::size_t
>(width),
static_cast<std::size_t
>(height)}, algorithm);
536 template<
typename FloatingPoint1,
typename FloatingPoint2,
537 typename std::enable_if_t<std::is_floating_point<FloatingPoint1>::value,
int> = 0,
538 typename std::enable_if_t<std::is_floating_point<FloatingPoint2>::value,
int> = 0>
630 friend ImageBackendAccessor;
644class ImageBackendAccessor
656 return image.m_backendHandle;
670 return peak::ipl::Image(imageHandle,
false);
684 return peak::ipl::Image(imageHandle,
true);
710 const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height)
728 const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height, uint64_t timestamp_ns) :
729 Image::
Image(pixelFormat, buffer, bufferSize, width, height)
738 imageView.GetSizeInBytes(), imageView.GetWidth(), imageView.GetHeight())
743 const auto timestamp_ns = metadata->GetValueByKey<peak::common::MetadataKey::DeviceTimestamp>();
744 ExecuteAndMapReturnCodes(
745 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Image_SetTimestamp(m_backendHandle, timestamp_ns); });
750 : m_backendHandle(imageHandle)
752 if (acquireReference && m_backendHandle)
768 if (other.m_backendHandle)
773 m_backendHandle = other.m_backendHandle;
785 if (other.m_backendHandle)
791 m_backendHandle = other.m_backendHandle;
798 *
this = std::move(other);
805 if (m_backendHandle !=
nullptr)
809 m_backendHandle = other.m_backendHandle;
810 other.m_backendHandle =
nullptr;
841 uint8_t* pixelPosition =
nullptr;
847 return pixelPosition;
852 size_t byteCount = 0;
874 uint8_t* data =
nullptr;
891 return ImageBackendAccessor::CreateImage(outputImageHandle);
904 return ImageBackendAccessor::CreateImage(outputImageHandle);
917 return ImageBackendAccessor::CreateImage(outputImageHandle);
921 const peak::ipl::PixelFormat& outputPixelFormat, uint8_t* outputImageBuffer,
size_t outputImageBufferSize,
931 return ImageBackendAccessor::CreateImage(outputImageHandle);
944 return ImageBackendAccessor::CreateImage(outputImageHandle);
958 return ImageBackendAccessor::CreateImage(outputImageHandle);
970 return ImageBackendAccessor::CreateImage(outputImageHandle);
975 return Scale(
Size2D{
static_cast<size_t>(
static_cast<double>(
Width()) * factor.
x),
static_cast<size_t>(
static_cast<double>(
Height()) * factor.
y)}, algorithm);
998 return ImageBackendAccessor::CreateImage(outputImageHandle);
1003 return Crop({0,0}, size);
1012 return ImageBackendAccessor::CreateImage(outputImageHandle);
1022 uint64_t timestamp_ns;
1027 return timestamp_ns;
1032 if (img.
ByteCount() != this->ByteCount())
1036 if (img.
Width() != this->Width())
1040 if (img.
Height() != this->Height())
1048 if (img.
Timestamp() != this->Timestamp())
1053 return memcmp(img.
Data(), this->Data(), img.
ByteCount()) == 0;
1058 return !(*
this == img);
Interface for viewing image pixel data from arbitrary sources.
Definition peak_common_iimageview.hpp:37
virtual PEAK_COMMON_NO_DISCARD std::shared_ptr< peak::common::Metadata > GetMetadata()=0
Returns the metadata object which can be used to retrieve or set metadata belonging to the image.
Stores the pixel format, width and height of an image and the pointer to the image buffer.
Definition peak_ipl_image.hpp:42
T * PixelPointer(size_t xPos, size_t yPos) const
Returns the pixel pointer to the given pixel position in relation to the size of the pixel format.
Definition peak_ipl_image.hpp:262
bool operator!=(const Image &img) const
Checks whether the image is data-wise different.
Definition peak_ipl_image.hpp:1056
Image & operator=(const Image &other)
Copy assigment for Image instance.
Definition peak_ipl_image.hpp:776
size_t Width() const
Returns the width.
Definition peak_ipl_image.hpp:816
bool Empty() const
Checks whether the image is empty.
Definition peak_ipl_image.hpp:1015
peak::ipl::Size2D Size() const
Returns the Size.
Definition peak_ipl_image.hpp:834
Image ConvertToWithFactor(const peak::ipl::PixelFormat &outputPixelFormat, double factor, double offset=0.0, peak::ipl::ConversionMode conversionMode=peak::ipl::ConversionMode::Fast) const
Converts the image to the specified outputPixelFormat and scales the pixel values by the factor.
Definition peak_ipl_image.hpp:907
peak::ipl::PixelFormat PixelFormat() const
Returns the pixel format.
Definition peak_ipl_image.hpp:860
uint8_t * PixelPointer(size_t xPos, size_t yPos) const
Returns the pixel pointer to the given pixel position in relation to the size of the pixel format.
Definition peak_ipl_image.hpp:839
size_t ByteCount() const
Returns the size of the given image in number of bytes.
Definition peak_ipl_image.hpp:850
bool operator==(const Image &img) const
Checks whether the image is data-wise the same.
Definition peak_ipl_image.hpp:1030
uint8_t * Data() const
Returns the pointer to the first pixel position in dependency on the size of the pixel format.
Definition peak_ipl_image.hpp:872
void ScaleInto(const peak::ipl::Size2D &size, uint8_t *buffer, std::size_t bufferSize, peak::ipl::InterpolationAlgorithm algorithm=InterpolationAlgorithm::linear) const
Scale the image to the supplied width and height using the supplied algorithm and save it into the su...
Definition peak_ipl_image.hpp:978
Image ConvertToFromInterval(const peak::ipl::PixelFormat &outputPixelFormat, const peak::ipl::Interval< double > &interval, peak::ipl::ConversionMode conversionMode=peak::ipl::ConversionMode::Fast) const
Converts the image to the specified outputPixelFormat. The pixel values are mapped from interval to t...
Definition peak_ipl_image.hpp:934
size_t Height() const
Returns the height.
Definition peak_ipl_image.hpp:825
Image Crop(const peak::ipl::Point2D &pos, const peak::ipl::Size2D &size) const
Crop the image to the size starting at pos.
Definition peak_ipl_image.hpp:988
Image Clone() const
Returns a new created image containing the data of the current image as deep copy.
Definition peak_ipl_image.hpp:1006
~Image()
Destructor for the Image instance.
Definition peak_ipl_image.hpp:758
Image()
Creates an empty image. In other words, size is 0x0 and an invalid pixel format.
Definition peak_ipl_image.hpp:694
Image ConvertTo(const peak::ipl::PixelFormat &outputPixelFormat, peak::ipl::ConversionMode conversionMode=peak::ipl::ConversionMode::Fast) const
Converts the image to the specified outputPixelFormat.
Definition peak_ipl_image.hpp:881
uint64_t Timestamp() const
The timestamp in nanoseconds.
Definition peak_ipl_image.hpp:1020
Image Scale(Integer1 width, Integer2 height, peak::ipl::InterpolationAlgorithm algorithm=InterpolationAlgorithm::linear) const
Scale the image to the supplied width and height using the supplied algorithm.
Definition peak_ipl_image.hpp:486
Image Scale(FloatingPoint1 scaleFactorX, FloatingPoint2 scaleFactorY, peak::ipl::InterpolationAlgorithm algorithm=InterpolationAlgorithm::linear) const
Scale the image to the supplied scale factors scaleFactorX and scaleFactorY using the supplied algori...
Definition peak_ipl_image.hpp:539
T * Data() const
Returns the pointer to the first pixel position in dependency on the size of the pixel format.
Definition peak_ipl_image.hpp:318
Interval support and convenience class.
Definition peak_ipl_interval.hpp:33
constexpr T End() const
Get the end value (inclusive) for the interval.
Definition peak_ipl_interval.hpp:76
constexpr T Start() const
Get the start value (inclusive) for the interval.
Definition peak_ipl_interval.hpp:64
PixelFormatName
Enum holding the possible pixel format names.
Definition peak_ipl_simple_types.hpp:38
@ Invalid
Invalid Pixel Format.
Definition peak_ipl_simple_types.hpp:39
InterpolationAlgorithm
Enum holding the possible interpolation algorithm.
Definition peak_ipl_simple_types.hpp:205
ConversionMode
Enum holding the possible conversion modes.
Definition peak_ipl_simple_types.hpp:27
@ linear
bilinear interpolation
Definition peak_ipl_simple_types.hpp:207
@ Fast
Fast conversion mode.
Definition peak_ipl_simple_types.hpp:28
@ DeviceTimestamp
Device-provided image acquisition timestamp in nanoseconds.
Definition peak_common_metadata_key.hpp:38
The "peak::ipl" namespace contains the whole image processing library.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:284
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_attribute_defines.h:20
PEAK_IPL_C_API PEAK_IPL_Image_Destruct(PEAK_IPL_IMAGE_HANDLE imageHandle)
Destroys the image associated with the given handle.
PEAK_IPL_C_API PEAK_IPL_Image_ConstructFromBuffer(PEAK_IPL_PIXEL_FORMAT pixelFormat, uint8_t *buffer, uint64_t bufferSize, size_t width, size_t height, PEAK_IPL_IMAGE_HANDLE *imageHandle)
Creates an image from a given buffer.
PEAK_IPL_C_API PEAK_IPL_Image_Construct(PEAK_IPL_PIXEL_FORMAT pixelFormat, size_t width, size_t height, PEAK_IPL_IMAGE_HANDLE *imageHandle)
Creates an image.
PEAK_IPL_C_API PEAK_IPL_Image_ConvertToFromInterval(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, double start, double end, PEAK_IPL_CONVERSION_MODE conversionMode, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Converts the given imageHandle to the specified outputPixelFormat. The pixel values are mapped from t...
PEAK_IPL_C_API PEAK_IPL_Image_ConvertToBufferWithFactorAndOffset(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, double factor, double offset, uint8_t *outputImageBuffer, size_t outputImageBufferSize, PEAK_IPL_CONVERSION_MODE conversionMode, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Converts the given imageHandle to the specified outputPixelFormat into an existing outputImageBuffer ...
PEAK_IPL_C_API PEAK_IPL_Image_Acquire(PEAK_IPL_IMAGE_HANDLE imageHandle)
Increase the reference count of an image object.
PEAK_IPL_C_API PEAK_IPL_Image_GetWidth(PEAK_IPL_IMAGE_HANDLE imageHandle, size_t *width)
Queries the width of the given image.
int32_t PEAK_IPL_CONVERSION_MODE
Definition peak_ipl_backend.h:52
PEAK_IPL_C_API PEAK_IPL_Image_ConvertToBufferFromInterval(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, double start, double end, uint8_t *outputImageBuffer, size_t outputImageBufferSize, PEAK_IPL_CONVERSION_MODE conversionMode, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Converts the given imageHandle to the specified outputPixelFormat into an existing outputImageBuffer....
PEAK_IPL_C_API PEAK_IPL_Image_GetTimestamp(PEAK_IPL_IMAGE_HANDLE imageHandle, uint64_t *timestamp_ns)
Get the timestamp for an image in nanoseconds.
PEAK_IPL_C_API PEAK_IPL_Image_ConvertTo(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, PEAK_IPL_CONVERSION_MODE conversionMode, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Creates a new image containing the data of the current image converted to the given pixel format.
PEAK_IPL_C_API PEAK_IPL_Image_Clone(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Returns a new created image containing the data of the current image as deep copy.
PEAK_IPL_C_API PEAK_IPL_Image_GetByteCount(PEAK_IPL_IMAGE_HANDLE imageHandle, size_t *byteCount)
Queries the size of the given image in number of bytes.
PEAK_IPL_C_API PEAK_IPL_Image_GetPixelFormat(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT *pixelFormat)
Queries the pixel format of the given image.
struct PEAK_IPL_IMAGE * PEAK_IPL_IMAGE_HANDLE
Definition peak_ipl_backend.h:402
PEAK_IPL_C_API PEAK_IPL_Image_ScaleInto(PEAK_IPL_IMAGE_HANDLE imageHandle, const struct PEAK_IPL_SIZE_2D *size, uint8_t *buffer, size_t bufferSize, PEAK_IPL_INTERPOLATION_ALGORITHM algorithm)
Creates a new image scaled to size using algorithm into the supplied buffer.
PEAK_IPL_C_API PEAK_IPL_Image_Crop(PEAK_IPL_IMAGE_HANDLE imageHandle, const struct PEAK_IPL_POINT_2D *pos, const struct PEAK_IPL_SIZE_2D *size, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Creates a new image cropped to size starting at position.
@ PEAK_IPL_PIXEL_FORMAT_INVALID
Definition peak_ipl_backend.h:57
PEAK_IPL_C_API PEAK_IPL_Image_Scale(PEAK_IPL_IMAGE_HANDLE imageHandle, const struct PEAK_IPL_SIZE_2D *size, PEAK_IPL_INTERPOLATION_ALGORITHM algorithm, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Creates a new image scaled to size using algorithm.
PEAK_IPL_C_API PEAK_IPL_Image_GetData(PEAK_IPL_IMAGE_HANDLE imageHandle, uint8_t **data)
Queries the data pointer of the given image.
int32_t PEAK_IPL_INTERPOLATION_ALGORITHM
Definition peak_ipl_backend.h:300
PEAK_IPL_C_API PEAK_IPL_Image_GetHeight(PEAK_IPL_IMAGE_HANDLE imageHandle, size_t *height)
Queries the height of the given image.
int32_t PEAK_IPL_PIXEL_FORMAT
Definition peak_ipl_backend.h:170
PEAK_IPL_C_API PEAK_IPL_Image_GetPixelPointer(PEAK_IPL_IMAGE_HANDLE imageHandle, size_t xPos, size_t yPos, uint8_t **pixelPointer)
Queries the pointer to the given pixel position.
PEAK_IPL_C_API PEAK_IPL_Image_SetTimestamp(PEAK_IPL_IMAGE_HANDLE imageHandle, uint64_t timestamp_ns)
Set the timestamp for an image in nanoseconds.
PEAK_IPL_C_API PEAK_IPL_Image_ConvertToWithFactorAndOffset(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, double factor, double offset, PEAK_IPL_CONVERSION_MODE conversionMode, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Creates a new image containing the data of the current image converted to the given pixel format mult...
PEAK_IPL_C_API PEAK_IPL_Image_ConvertToBuffer(PEAK_IPL_IMAGE_HANDLE imageHandle, PEAK_IPL_PIXEL_FORMAT outputPixelFormat, uint8_t *outputImageBuffer, size_t outputImageBufferSize, PEAK_IPL_CONVERSION_MODE conversionMode, PEAK_IPL_IMAGE_HANDLE *outputImageHandle)
Stores the data of the current image converted to the given pixel format into a destination buffer an...
#define PEAK_IPL_C_ABI_PREFIX
Definition peak_ipl_dll_defines.h:11
Definition peak_ipl_backend.h:256
Definition peak_ipl_backend.h:262
2D position in an image.
Definition peak_ipl_simple_types.hpp:245
size_t x
X position.
Definition peak_ipl_simple_types.hpp:246
size_t y
Y position.
Definition peak_ipl_simple_types.hpp:247
Scale Factors of an image.
Definition peak_ipl_simple_types.hpp:271
double y
Y factor.
Definition peak_ipl_simple_types.hpp:273
double x
X factor.
Definition peak_ipl_simple_types.hpp:272
2D size of an image.
Definition peak_ipl_simple_types.hpp:220
size_t height
Height of size.
Definition peak_ipl_simple_types.hpp:222
size_t width
Width of size.
Definition peak_ipl_simple_types.hpp:221