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 if (_data ==
nullptr && _width == 0 && _height == 0 &&
rowStride == 0 &&
pixStride == 0) {
87 fprintf(stderr,
"zxing-cpp deprecation warning: ImageView(nullptr, ...) will throw in the future, use ImageView()\n");
92 throw std::invalid_argument(
"Can not construct an ImageView from a NULL pointer");
94 if (_width <= 0 || _height <= 0)
95 throw std::invalid_argument(
"Neither width nor height of ImageView can be less or equal to 0");
115 if (_rowStride < 0 || _pixStride < 0 || size < _height * _rowStride)
116 throw std::invalid_argument(
"ImageView parameters are inconsistent (out of bounds)");
119 int width()
const {
return _width; }
125 const uint8_t*
data()
const {
return _data; }
126 const uint8_t*
data(
int x,
int y)
const {
return _data + y * _rowStride + x * _pixStride; }
132 left = std::clamp(left, 0, _width - 1);
133 top = std::clamp(top, 0, _height - 1);
136 return {
data(left, top),
width,
height, _format, _rowStride, _pixStride};
143 switch ((degree + 360) % 360) {
144 case 90:
return {
data(0, _height - 1), _height, _width, _format, _pixStride, -_rowStride};
145 case 180:
return {
data(_width - 1, _height - 1), _width, _height, _format, -_rowStride, -_pixStride};
146 case 270:
return {
data(_width - 1, 0), _height, _width, _format, -_pixStride, _rowStride};
147 default:
return *
this;
155 return {_data, _width / scale, _height / scale, _format, _rowStride * scale, _pixStride * scale};
165 std::unique_ptr<uint8_t[]> _memory;
Image(int w, int h, ImageFormat f=ImageFormat::Lum)
Definition ImageView.h:170
const uint8_t * data() const
Definition ImageView.h:125
int width() const
Definition ImageView.h:119
int pixStride() const
Definition ImageView.h:121
const uint8_t * data(int x, int y) const
Definition ImageView.h:126
int rowStride() const
Definition ImageView.h:122
ImageView rotated(int degree) const
Definition ImageView.h:141
ImageView(const uint8_t *data, int size, int width, int height, ImageFormat format, int rowStride=0, int pixStride=0)
Definition ImageView.h:112
int height() const
Definition ImageView.h:120
ImageFormat format() const
Definition ImageView.h:123
ImageView subsampled(int scale) const
Definition ImageView.h:153
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:130
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:100