image_buffer_description.hpp
1 #pragma once
2 
3 #include "../_cexports/c_gev_server.h"
4 #include "../global.hpp"
5 #include "../point_2d.hpp"
6 #include "../size_2d.hpp"
7 #include "pfnc_format.hpp"
8 
9 namespace Cvb
10 {
11 CVB_BEGIN_INLINE_NS
12 namespace GevServer
13 {
24 {
25  friend class Stream;
26  friend class ChunkImageBufferDescription;
27 
28 public:
29  virtual ~ImageBufferDescription() = default;
30 
42  : ImageBufferDescription(size, PfncFormatValue::From(colorModel, dataType))
43  {
44  }
45 
52  {
53  if (size.Width() < 1)
54  throw std::runtime_error("Width must be larger or equal to 1");
55  if (size.Height() < 1)
56  throw std::runtime_error("Height must be larger or equal to 1");
57  if (pixelFormat == PfncFormat::InvalidPixelFormat)
58  throw std::runtime_error("Invalid pixel format");
59 
60  data_ = CExports::GSImageDataBlock{{CExports::TGSPayloadType::GSPT_Image},
61  static_cast<CExports::cvbuint32_t>(pixelFormat),
62  static_cast<CExports::cvbuint32_t>(size.Width()),
63  static_cast<CExports::cvbuint32_t>(size.Height()),
64  {},
65  {},
66  {},
67  {},
68  {}};
69  }
70 
72  PfncFormat PixelFormat() const noexcept { return static_cast<PfncFormat>(data_.PixelFormat); }
73 
75  void SetPixelFormat(const PfncFormat &pixelFormat)
76  {
77  if (pixelFormat == PfncFormat::InvalidPixelFormat)
78  throw std::runtime_error("Invalid pixel format");
79 
80  data_.PixelFormat = static_cast<CExports::cvbuint32_t>(pixelFormat);
81  }
82 
84  Size2D<int> Size() const noexcept
85  {
86  return Size2D<int>(static_cast<int>(data_.Width), static_cast<int>(data_.Height));
87  }
88 
90  void SetSize(const Size2D<int> &size)
91  {
92  if (size.Width() < 1)
93  throw std::runtime_error("Width must be larger or equal to 1");
94  if (size.Height() < 1)
95  throw std::runtime_error("Height must be larger or equal to 1");
96 
97  data_.Width = static_cast<CExports::cvbuint32_t>(size.Width());
98  data_.Height = static_cast<CExports::cvbuint32_t>(size.Height());
99  }
100 
106  Point2D<int> Offset() const noexcept
107  {
108  return Point2D<int>(static_cast<int>(data_.XOffset), static_cast<int>(data_.YOffset));
109  }
110 
117  {
118  if (point.X() < 0)
119  throw std::runtime_error("X must be larger or equal to 0");
120  if (point.Y() < 0)
121  throw std::runtime_error("Y must be larger or equal to 0");
122 
123  data_.XOffset = static_cast<CExports::cvbuint32_t>(point.X());
124  data_.YOffset = static_cast<CExports::cvbuint32_t>(point.Y());
125  }
126 
137  int LinePadding() const noexcept { return static_cast<int>(data_.XPadding); }
138 
149  void SetLinePadding(int padding) { data_.XPadding = static_cast<CExports::cvbuint32_t>(padding); }
150 
151 private:
153  CExports::GSImageDataBlock ImageDataBlock() { return data_; }
154 
155  CExports::GSImageDataBlock data_;
156 };
157 }
158 CVB_END_INLINE_NS
159 }
T Height() const noexcept
Gets the vertical component of the size.
Definition: size_2d.hpp:79
void SetSize(const Size2D< int > &size)
Sets the image size.
Definition: image_buffer_description.hpp:90
Describes a GenICam Pixel Format Naming Convention (PFNC) compatible image memory buffer with possibl...
Definition: chunk_image_buffer_description.hpp:29
Size2D< int > Size() const noexcept
Gets the image size.
Definition: image_buffer_description.hpp:84
Describes a GenICam Pixel Format Naming Convention (PFNC) compatible image memory buffer.
Definition: image_buffer_description.hpp:23
Helper methods for PfncFormat values. ///
Definition: pfnc_format.hpp:1004
void SetPixelFormat(const PfncFormat &pixelFormat)
Sets the image pixel format value.
Definition: image_buffer_description.hpp:75
PfncFormat
GenICam Pixel Format Naming Convention (PFNC) format values.
Definition: pfnc_format.hpp:20
ImageBufferDescription(Size2D< int > size, ColorModel colorModel, DataType dataType)
Creates a default image buffer description.
Definition: image_buffer_description.hpp:41
PfncFormat PixelFormat() const noexcept
Gets the image pixel format value.
Definition: image_buffer_description.hpp:72
The stream to send Images or other data.
Definition: decl_stream.hpp:18
Root namespace for the Image Manager interface.
Definition: version.hpp:11
Point2D< int > Offset() const noexcept
Get the image's offset on the sensor.
Definition: image_buffer_description.hpp:106
T Y() const noexcept
Gets the y-component of the point.
Definition: point_2d.hpp:106
ColorModel
Color model that this image is using.
Definition: global.hpp:150
T X() const noexcept
Gets the x-component of the point.
Definition: point_2d.hpp:86
void SetLinePadding(int padding)
Sets the line padding.
Definition: image_buffer_description.hpp:149
Data type description for an image plane.
Definition: data_type.hpp:27
void SetOffset(Point2D< int > point)
Set the image's offset on the sensor.
Definition: image_buffer_description.hpp:116
int LinePadding() const noexcept
Gets the line padding.
Definition: image_buffer_description.hpp:137
ImageBufferDescription(Size2D< int > size, PfncFormat pixelFormat)
Creates a default image buffer description.
Definition: image_buffer_description.hpp:51
T Width() const noexcept
Gets the horizontal component of the size.
Definition: size_2d.hpp:59