35constexpr inline int PixStride(
ImageFormat format) {
return (
static_cast<uint32_t
>(format) >> 3*8) & 0xFF; }
36constexpr inline int RedIndex(
ImageFormat format) {
return (
static_cast<uint32_t
>(format) >> 2*8) & 0xFF; }
37constexpr inline int GreenIndex(
ImageFormat format) {
return (
static_cast<uint32_t
>(format) >> 1*8) & 0xFF; }
38constexpr inline int BlueIndex(
ImageFormat format) {
return (
static_cast<uint32_t
>(format) >> 0*8) & 0xFF; }
40constexpr inline uint8_t RGBToLum(
unsigned r,
unsigned g,
unsigned b)
45 return static_cast<uint8_t
>((306 * r + 601 * g + 117 * b + 0x200) >> 10);
56 const uint8_t* _data =
nullptr;
58 int _width = 0, _height = 0, _pixStride = 0, _rowStride = 0;
86 throw std::invalid_argument(
"Can not construct an ImageView from a NULL pointer");
88 if (_width <= 0 || _height <= 0)
89 throw std::invalid_argument(
"Neither width nor height of ImageView can be less or equal to 0");
109 if (_rowStride < 0 || _pixStride < 0 || size < _height * _rowStride)
110 throw std::invalid_argument(
"ImageView parameters are inconsistent (out of bounds)");
113 int width()
const {
return _width; }
119 const uint8_t*
data()
const {
return _data; }
120 const uint8_t*
data(
int x,
int y)
const {
return _data + y * _rowStride + x * _pixStride; }
126 left = std::clamp(left, 0, _width - 1);
127 top = std::clamp(top, 0, _height - 1);
130 return {
data(left, top),
width,
height, _format, _rowStride, _pixStride};
137 switch ((degree + 360) % 360) {
138 case 90:
return {
data(0, _height - 1), _height, _width, _format, _pixStride, -_rowStride};
139 case 180:
return {
data(_width - 1, _height - 1), _width, _height, _format, -_rowStride, -_pixStride};
140 case 270:
return {
data(_width - 1, 0), _height, _width, _format, -_pixStride, _rowStride};
141 default:
return *
this;
149 return {_data, _width / scale, _height / scale, _format, _rowStride * scale, _pixStride * scale};
159 std::unique_ptr<uint8_t[]> _memory;
Image(int w, int h, ImageFormat f=ImageFormat::Lum)
Definition ImageView.h:164
const uint8_t * data() const
Definition ImageView.h:119
int width() const
Definition ImageView.h:113
int pixStride() const
Definition ImageView.h:115
const uint8_t * data(int x, int y) const
Definition ImageView.h:120
int rowStride() const
Definition ImageView.h:116
ImageView rotated(int degree) const
Definition ImageView.h:135
ImageView(const uint8_t *data, int size, int width, int height, ImageFormat format, int rowStride=0, int pixStride=0)
Definition ImageView.h:106
int height() const
Definition ImageView.h:114
ImageFormat format() const
Definition ImageView.h:117
ImageView subsampled(int scale) const
Definition ImageView.h:147
ImageView(const uint8_t *data, int width, int height, ImageFormat format, int rowStride=0, int pixStride=0)
Definition ImageView.h:77
ImageView cropped(int left, int top, int width, int height) const
Definition ImageView.h:124
ImageFormat
Supported image formats for ImageView. The format encodes the pixel format and layout information.
Definition ImageView.h:18
@ RGBX
Definition ImageView.h:28
@ XRGB
Definition ImageView.h:29
@ BGR
Definition ImageView.h:23
@ Lum
Definition ImageView.h:20
@ XBGR
Definition ImageView.h:31
@ LumA
Definition ImageView.h:21
@ BGRA
Definition ImageView.h:26
@ None
Definition ImageView.h:19
@ RGB
Definition ImageView.h:22
@ ABGR
Definition ImageView.h:27
@ ARGB
Definition ImageView.h:25
@ RGBA
Definition ImageView.h:24
@ BGRX
Definition ImageView.h:30
@ None
Definition BarcodeFormat.h:103