54 friend class Argb32ConstPixel;
58 typedef Color ColorType;
62 Argb32Pixel(T& view, Pt::ssize_t x, Pt::ssize_t y);
64 Argb32Pixel(
const Argb32Pixel& p) =
default;
66 ~Argb32Pixel() =
default;
68 Argb32Pixel& operator=(
const Argb32Pixel&) =
delete;
70 Argb32Pixel& operator=(
const Color& color);
73 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
75 void reset(
const Argb32Pixel& p);
102 Color getColor()
const;
108 void advance(Pt::ssize_t n);
110 void advanceLines(Pt::ssize_t n);
112 void assign(
const Argb32Pixel& p);
114 void assign(
const Argb32ConstPixel& p);
116 void assign(
const Argb32Pixel& p, std::size_t length);
118 void assign(
const Argb32ConstPixel& p, std::size_t length);
120 void getColors(
Color* colors, std::size_t length)
const;
122 void assign(
const Color* colors, std::size_t length);
124 void fill(std::size_t n,
const Color& color);
126 bool equals(
const Argb32Pixel& p)
const;
128 bool equals(
const Argb32ConstPixel& p)
const;
139class Argb32ConstPixel
141 friend class Argb32Pixel;
144 typedef Argb32 FormatType;
145 typedef Color ColorType;
149 Pt::ssize_t x, Pt::ssize_t y);
152 template <
typename T>
153 Argb32ConstPixel(
const T& view, Pt::ssize_t x, Pt::ssize_t y);
155 template <
typename T>
156 Argb32ConstPixel(T& view, Pt::ssize_t x, Pt::ssize_t y);
158 Argb32ConstPixel(
const Argb32ConstPixel& p) =
default;
160 Argb32ConstPixel(
const Argb32Pixel& p);
162 ~Argb32ConstPixel() =
default;
164 Argb32ConstPixel& operator=(
const Argb32ConstPixel&) =
delete;
166 template <
typename T>
167 void reset(
const T& view, Pt::ssize_t x, Pt::ssize_t y);
169 template <
typename T>
170 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
172 void reset(
const Argb32ConstPixel& p);
174 void reset(
const Argb32Pixel& p);
190 Color getColor()
const;
196 void advance(Pt::ssize_t n);
198 void advanceLines(Pt::ssize_t n);
200 void getColors(
Color* colors, std::size_t length)
const;
202 bool equals(
const Argb32ConstPixel& p)
const;
204 bool equals(
const Argb32Pixel& p)
const;
219class PT_GFX_API Argb32 final :
public ImageFormat
221 static const unsigned PixelWidth = 4;
228 static const Argb32& get()
230 static Argb32 _argb32;
236 : ImageFormat(PixelWidth)
246 std::size_t imageSize(std::size_t width, std::size_t height,
247 std::size_t padding)
const
249 std::size_t stride = (width * 4) + padding;
250 std::size_t n = stride * height;
255 virtual std::unique_ptr<ImageFormat> onClone()
const override
257 return std::unique_ptr<ImageFormat>(
new Argb32);
260 virtual const std::type_info& onGetType()
const override
262 return typeid(*this);
265 virtual std::size_t onImageSize(Pt::ssize_t width, Pt::ssize_t height,
266 std::size_t padding)
const override;
268 virtual PixelBase* onCreatePixel(
Pt::uint8_t* data,
const ViewBase& view,
269 Pt::ssize_t x, Pt::ssize_t y,
270 PixelStorage& store)
const override;
273 template <
typename BasePtr>
274 static BasePtr getPixel(
const ViewBase& view, BasePtr base,
275 Pt::ssize_t xpos, Pt::ssize_t ypos)
277 base += ypos * view.stride();
278 base += xpos * PixelWidth;
282 template <
typename BasePtr>
283 static BasePtr advance(
const ViewBase& view, BasePtr base)
285 return base + PixelWidth;
288 template <
typename BasePtr>
289 static BasePtr advance(
const ViewBase& view, BasePtr base, Pt::ssize_t n)
291 return base + n * PixelWidth;
294 template <
typename BasePtr>
295 static BasePtr skipPadding(
const ViewBase& view, BasePtr base)
297 Pt::ssize_t w = view.width() * PixelWidth;
298 Pt::ssize_t off = view.stride() - w;
302 template <
typename BasePtr>
303 static BasePtr advanceLines(
const ViewBase& view, BasePtr base, Pt::ssize_t n)
305 return base + n * view.stride();
312 static void getColors(
const Pt::uint8_t* p, Gfx::ColorF* colors, std::size_t n);
314 static void getColors(
const Pt::uint8_t* p, Color* colors, std::size_t n);
316 static void assign(
Pt::uint8_t* to,
const Color& from);
318 static void assign(
Pt::uint8_t* to,
const ColorF& c);
320 static void fill(
Pt::uint8_t* to, std::size_t length,
const Color& c);
322 static void fill(
Pt::uint8_t* to, std::size_t length,
const ColorF& c);
324 static void assign(
Pt::uint8_t* to,
const Color* colors, std::size_t length);
326 static void assign(
Pt::uint8_t* to,
const ColorF* colors, std::size_t length);
void sourceOver(Argb32Pixel &to, std::size_t length, const Color &from)
Blends one color over N destination pixels.
void sourceCopy(Argb32Pixel &to, std::size_t length, const Color &from)
Copies one color to N destination pixels.