40 auto usableHeight =
static_cast<uint32_t
>(buffer->Height());
41 const auto usableWidth =
static_cast<uint32_t
>(buffer->Width());
43 const auto imageSizeWithPadding = buffer->Size() - buffer->ImageOffset();
44 auto usableBytes = pixelFormatInfo.GetSizeInBytes({usableWidth, usableHeight});
46 if (usableBytes > imageSizeWithPadding)
50 auto* firstPixelPtr =
static_cast<uint8_t*
>(buffer->BasePtr()) + buffer->ImageOffset();
52 if (buffer->HasChunks())
54 auto chunks = buffer->Chunks();
61 const auto imageSizeWithPaddingWithoutChunks = chunks[0]->Size();
63 for (
const auto& chunk : chunks)
65 if (0x73020405 == chunk->ID())
67 const auto* chunkBase =
static_cast<uint16_t*
>(chunk->BasePtr());
69 usableHeight =
static_cast<uint32_t
>(chunkBase[1]);
70 const auto usableOffsetX =
static_cast<size_t>(chunkBase[2]);
71 if (usableOffsetX != 0)
74 "Buffer has a non-zero 'UsableOffsetX', which is not supported!");
76 const auto usableOffsetY =
static_cast<size_t>(chunkBase[3]);
79 const auto pitch = imageSizeWithPaddingWithoutChunks / buffer->Height();
80 const auto cutOffTop = pitch * usableOffsetY;
82 firstPixelPtr += cutOffTop;
86 usableBytes = pixelFormatInfo.GetSizeInBytes({ usableWidth, usableHeight });
87 if (usableBytes > imageSizeWithPaddingWithoutChunks)
98 static_cast<void*
>(firstPixelPtr), usableBytes };
103 const auto remoteNodeMap = buffer->ParentDataStream()->ParentDevice()->RemoteDevice()->NodeMaps().at(0);
104 remoteNodeMap->UpdateChunkNodes(buffer);
119 static_cast<uint32_t
>(chunkWidth->Value()),
static_cast<uint32_t
>(chunkHeight->Value()));
128 chunkPixelFormat->CurrentEntry()->NumericValue());
131 const auto imageData = buffer->Chunks().at(0);
132 const auto rawData = imageData->BasePtr();
133 const auto sizeInBytes = imageData->Size();
136 const auto expectedDataSize = pixelFormatInfo.GetSizeInBytes(size);
137 if (sizeInBytes < expectedDataSize)
139 std::stringstream msg;
140 msg <<
"The buffer's first chunk's size (" << imageData->Size() <<
") is smaller than the expected data size ("
141 << expectedDataSize <<
").";
145 return { size, pixelFormat, rawData, sizeInBytes };
155 const auto partType = part->Type();
166 return {
peak::common::Size{
static_cast<uint32_t
>(part->Width()),
static_cast<uint32_t
>(part->Height()) },
172 if (buffer ==
nullptr)
177 if (buffer->HasImage())
192 if (buffer ==
nullptr)
197 auto metadata = std::make_shared<peak::common::Metadata>();
215inline ImageView::ImageView(
const detail::ExtractedPayload& payload, std::shared_ptr<peak::common::Metadata> metadata)
216 : m_metadata{ std::move(metadata) }
217 , m_payload{ payload }
223 m_parentBuffer = buffer;
227 :
ImageView(
detail::ExtractPayloadFromBufferPart(part),
detail::ExtractMetadataFromBuffer(part->ParentBuffer()))
229 m_parentBuffer = part->ParentBuffer();
234 return static_cast<uint8_t*
>(m_payload.dataPtr);
239 return static_cast<uint8_t*
>(m_payload.dataPtr);
244 return m_payload.dataSize;
249 return m_payload.pixelFormat;
259 return m_payload.size;
269 return m_payload.size.GetHeight();
281 return pixelformatInfo.GetSizeInBytes(m_payload.size) / m_payload.size.GetHeight();
296 return LockOrThrow(m_parentBuffer);
PEAK_COMMON_NO_DISCARD constexpr T GetWidth() const
Returns the width.
Definition peak_common_size.hpp:119
PEAK_COMMON_NO_DISCARD uint32_t GetHeight() const override
Height of the image in pixels.
Definition peak_image_view_impl.hpp:267
PEAK_COMMON_NO_DISCARD std::size_t GetSizeInBytes() const override
Size of the image in bytes.
Definition peak_image_view_impl.hpp:242
PEAK_COMMON_NO_DISCARD size_t GetBytesPerLine() const override
The amount of bytes per line.
Definition peak_image_view_impl.hpp:277
PEAK_COMMON_NO_DISCARD peak::common::PixelFormatInfo GetPixelFormatInfo() const override
Information object for the PixelFormat of the contained image.
Definition peak_image_view_impl.hpp:252
PEAK_COMMON_NO_DISCARD size_t GetBitsPerPixel() const override
The amount of bits in one pixel.
Definition peak_image_view_impl.hpp:272
PEAK_COMMON_NO_DISCARD std::shared_ptr< peak::core::Buffer > GetParentBuffer() const
The parent buffer object, the image view was created from.
Definition peak_image_view_impl.hpp:294
PEAK_COMMON_NO_DISCARD uint32_t GetWidth() const override
Width of the image in pixels.
Definition peak_image_view_impl.hpp:262
PEAK_COMMON_NO_DISCARD const uint8_t * GetData() const override
Get pointer to the first byte of the image (read-only).
Definition peak_image_view_impl.hpp:232
ImageView(const std::shared_ptr< Buffer > &buffer)
Construct an ImageView from a Buffer.
Definition peak_image_view_impl.hpp:220
PEAK_COMMON_NO_DISCARD peak::common::PixelFormat GetPixelFormat() const override
PixelFormat of the contained image.
Definition peak_image_view_impl.hpp:247
PEAK_COMMON_NO_DISCARD peak::common::Size GetSize() const override
Get the dimensions of the image. I.e. Width, Height, etc.
Definition peak_image_view_impl.hpp:257
PEAK_COMMON_NO_DISCARD std::shared_ptr< peak::common::Metadata > GetMetadata() override
The metadata object belonging to the image.
Definition peak_image_view_impl.hpp:284
The exception thrown for internal errors.
Definition peak_exception.hpp:81
The exception thrown for passing an invalid argument to a function.
Definition peak_exception.hpp:116
The exception thrown for trying to apply an invalid cast.
Definition peak_exception.hpp:142
The exception thrown for signaling that a feature is not available in the device.
Definition peak_exception.hpp:177
The exception thrown for signaling a feature is not implemented.
Definition peak_exception.hpp:195
Represents a GenAPI enumeration node.
Definition peak_enumeration_node.hpp:40
Represents a GenAPI integer node.
Definition peak_integer_node.hpp:38
@ Image3D
Definition peak_buffer_part.hpp:42
@ ConfidenceMap
Definition peak_buffer_part.hpp:46
@ Image2D
Definition peak_buffer_part.hpp:38
@ Chunk
Definition peak_buffer.hpp:48
@ Custom
Definition peak_buffer.hpp:72
@ IIDC
Definition peak_buffer.hpp:68
detail::SizeT< uint32_t > Size
Size with unsigned 32-bit integer dimensions.
Definition peak_common_size.hpp:273
PixelFormat
Enum listing all supported pixel formats and their internal IDs.
Definition peak_common_pixel_format.hpp:44
@ NotAvailable
Definition peak_node.hpp:48
@ DeviceTimestamp
Device-provided image acquisition timestamp in nanoseconds.
Definition peak_common_metadata_key.hpp:44
@ DeviceFrameID
A sequentially incremented identifier for the frame.
Definition peak_common_metadata_key.hpp:57
Definition peak_image_view.hpp:31
std::shared_ptr< peak::common::Metadata > ExtractMetadataFromBuffer(const std::shared_ptr< core::Buffer > &buffer)
Definition peak_image_view_impl.hpp:190
ExtractedPayload ExtractPayloadFromBuffer(const std::shared_ptr< peak::core::Buffer > &buffer)
Definition peak_image_view_impl.hpp:170
ExtractedPayload ExtractPayloadTypeChunk(const std::shared_ptr< peak::core::Buffer > &buffer)
Definition peak_image_view_impl.hpp:101
ExtractedPayload ExtractPayloadFromBufferPart(const std::shared_ptr< core::BufferPart > &part)
Definition peak_image_view_impl.hpp:148
ExtractedPayload ExtractPayloadTypeImage(const std::shared_ptr< peak::core::Buffer > &buffer)
Definition peak_image_view_impl.hpp:35
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:34
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_dynamic_loader.h:33