29class ImageBackendAccessor;
91 const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height);
128 Image(
const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height, uint64_t timestamp_ns);
266 template<typename T, typename = std::enable_if_t<std::is_arithmetic<T>::value>>
322 template<typename T, typename = std::enable_if_t<std::is_arithmetic<T>::value>>
325 return reinterpret_cast<T*
>(
Data());
367 size_t outputImageBufferSize,
422 uint8_t* outputImageBuffer,
size_t outputImageBufferSize,
double factor,
double offset = 0.0,
488 template <
typename Integer1,
typename Integer2,
489 typename std::enable_if_t<std::is_integral<Integer1>::value,
int> = 0,
490 typename std::enable_if_t<std::is_integral<Integer2>::value,
int> = 0>
493 return Scale(
peak::ipl::Size2D{
static_cast<std::size_t
>(width),
static_cast<std::size_t
>(height)}, algorithm);
541 template<
typename FloatingPoint1,
typename FloatingPoint2,
542 typename std::enable_if_t<std::is_floating_point<FloatingPoint1>::value,
int> = 0,
543 typename std::enable_if_t<std::is_floating_point<FloatingPoint2>::value,
int> = 0>
635 friend ImageBackendAccessor;
649class ImageBackendAccessor
661 return image.m_backendHandle;
675 return peak::ipl::Image(imageHandle,
false);
689 return peak::ipl::Image(imageHandle,
true);
715 const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height)
733 const peak::ipl::PixelFormat& pixelFormat, uint8_t* buffer,
size_t bufferSize,
size_t width,
size_t height, uint64_t timestamp_ns) :
734 Image::
Image(pixelFormat, buffer, bufferSize, width, height)
743 imageView.GetSizeInBytes(), imageView.GetWidth(), imageView.GetHeight())
748 const auto timestamp_ns = metadata->GetValueByKey<peak::common::MetadataKey::DeviceTimestamp>();
749 ExecuteAndMapReturnCodes(
750 [&] { return PEAK_IPL_C_ABI_PREFIX PEAK_IPL_Image_SetTimestamp(m_backendHandle, timestamp_ns); });
755 : m_backendHandle(imageHandle)
757 if (acquireReference && m_backendHandle)
773 if (other.m_backendHandle)
778 m_backendHandle = other.m_backendHandle;
790 if (other.m_backendHandle)
796 m_backendHandle = other.m_backendHandle;
803 *
this = std::move(other);
810 if (m_backendHandle !=
nullptr)
814 m_backendHandle = other.m_backendHandle;
815 other.m_backendHandle =
nullptr;
846 uint8_t* pixelPosition =
nullptr;
852 return pixelPosition;
857 size_t byteCount = 0;
879 uint8_t* data =
nullptr;
896 return ImageBackendAccessor::CreateImage(outputImageHandle);
909 return ImageBackendAccessor::CreateImage(outputImageHandle);
922 return ImageBackendAccessor::CreateImage(outputImageHandle);
926 const peak::ipl::PixelFormat& outputPixelFormat, uint8_t* outputImageBuffer,
size_t outputImageBufferSize,
936 return ImageBackendAccessor::CreateImage(outputImageHandle);
949 return ImageBackendAccessor::CreateImage(outputImageHandle);
963 return ImageBackendAccessor::CreateImage(outputImageHandle);
975 return ImageBackendAccessor::CreateImage(outputImageHandle);
980 return Scale(
Size2D{
static_cast<size_t>(
static_cast<double>(
Width()) * factor.
x),
static_cast<size_t>(
static_cast<double>(
Height()) * factor.
y)}, algorithm);
1003 return ImageBackendAccessor::CreateImage(outputImageHandle);
1008 return Crop({0,0}, size);
1017 return ImageBackendAccessor::CreateImage(outputImageHandle);
1027 uint64_t timestamp_ns;
1032 return timestamp_ns;
1037 if (img.
ByteCount() != this->ByteCount())
1041 if (img.
Width() != this->Width())
1045 if (img.
Height() != this->Height())
1053 if (img.
Timestamp() != this->Timestamp())
1058 return memcmp(img.
Data(), this->Data(), img.
ByteCount()) == 0;
1063 return !(*
this == img);
Interface for viewing image pixel data from arbitrary sources.
Definition peak_common_iimageview.hpp:42
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:47
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:267
bool operator!=(const Image &img) const
Checks whether the image is data-wise different.
Definition peak_ipl_image.hpp:1061
Image & operator=(const Image &other)
Copy assigment for Image instance.
Definition peak_ipl_image.hpp:781
size_t Width() const
Returns the width.
Definition peak_ipl_image.hpp:821
bool Empty() const
Checks whether the image is empty.
Definition peak_ipl_image.hpp:1020
peak::ipl::Size2D Size() const
Returns the Size.
Definition peak_ipl_image.hpp:839
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:912
peak::ipl::PixelFormat PixelFormat() const
Returns the pixel format.
Definition peak_ipl_image.hpp:865
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:844
size_t ByteCount() const
Returns the size of the given image in number of bytes.
Definition peak_ipl_image.hpp:855
bool operator==(const Image &img) const
Checks whether the image is data-wise the same.
Definition peak_ipl_image.hpp:1035
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:877
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:983
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:939
size_t Height() const
Returns the height.
Definition peak_ipl_image.hpp:830
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:993
Image Clone() const
Returns a new created image containing the data of the current image as deep copy.
Definition peak_ipl_image.hpp:1011
~Image()
Destructor for the Image instance.
Definition peak_ipl_image.hpp:763
Image()
Creates an empty image. In other words, size is 0x0 and an invalid pixel format.
Definition peak_ipl_image.hpp:699
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:886
uint64_t Timestamp() const
The timestamp in nanoseconds.
Definition peak_ipl_image.hpp:1025
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:491
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:544
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:323
Interval support and convenience class.
Definition peak_ipl_interval.hpp:38
constexpr T End() const
Get the end value (inclusive) for the interval.
Definition peak_ipl_interval.hpp:81
constexpr T Start() const
Get the start value (inclusive) for the interval.
Definition peak_ipl_interval.hpp:69
PixelFormatName
Enum holding the possible pixel format names.
Definition peak_ipl_simple_types.hpp:43
@ Invalid
Invalid Pixel Format.
Definition peak_ipl_simple_types.hpp:44
InterpolationAlgorithm
Enum holding the possible interpolation algorithm.
Definition peak_ipl_simple_types.hpp:210
ConversionMode
Enum holding the possible conversion modes.
Definition peak_ipl_simple_types.hpp:32
@ linear
bilinear interpolation
Definition peak_ipl_simple_types.hpp:212
@ Fast
Fast conversion mode.
Definition peak_ipl_simple_types.hpp:33
@ DeviceTimestamp
Device-provided image acquisition timestamp in nanoseconds.
Definition peak_common_metadata_key.hpp:43
The "peak::ipl" namespace contains the whole image processing library.
void ExecuteAndMapReturnCodes(const CallableType &callableObject)
Definition peak_ipl_exception.hpp:289
#define PEAK_IPL_NO_DISCARD
Definition peak_ipl_attribute_defines.h:25
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:55
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:405
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:60
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:303
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:173
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:16
Definition peak_ipl_backend.h:259
Definition peak_ipl_backend.h:265
2D position in an image.
Definition peak_ipl_simple_types.hpp:250
size_t x
X position.
Definition peak_ipl_simple_types.hpp:251
size_t y
Y position.
Definition peak_ipl_simple_types.hpp:252
Scale Factors of an image.
Definition peak_ipl_simple_types.hpp:276
double y
Y factor.
Definition peak_ipl_simple_types.hpp:278
double x
X factor.
Definition peak_ipl_simple_types.hpp:277
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