30 #ifndef PT_GFX_ARGB32_H
31 #define PT_GFX_ARGB32_H
33 #include <Pt/Gfx/Api.h>
34 #include <Pt/Gfx/ImageFormat.h>
35 #include <Pt/Gfx/Color.h>
66 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
70 const ViewBase& view()
const
95 Color getColor()
const;
101 void advance(Pt::ssize_t n);
103 void advanceLines(Pt::ssize_t n);
109 void assign(
const Argb32Pixel& p, std::size_t length);
113 void getColors(
Color* colors, std::size_t length)
const;
115 void assign(
const Color* colors, std::size_t length);
117 void fill(std::size_t n,
const Color& color);
124 const ViewBase* _view;
140 Pt::ssize_t x, Pt::ssize_t y);
143 template <
typename T>
146 template <
typename T>
157 template <
typename T>
158 void reset(
const T& view, Pt::ssize_t x, Pt::ssize_t y);
160 template <
typename T>
161 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
167 const ViewBase& view()
const
181 Color getColor()
const;
187 void advance(Pt::ssize_t n);
189 void advanceLines(Pt::ssize_t n);
191 void getColors(
Color* colors, std::size_t length)
const;
198 const ViewBase* _view;
206 static const unsigned PixelWidth = 4;
213 static const Argb32& get()
231 std::size_t imageSize(std::size_t width, std::size_t height,
232 std::size_t padding)
const
234 std::size_t stride = (width * 4) + padding;
235 std::size_t n = stride * height;
240 virtual std::unique_ptr<ImageFormat> onClone()
const override
242 return std::unique_ptr<ImageFormat>(
new Argb32);
245 virtual const std::type_info& onGetType()
const override
247 return typeid(*this);
250 virtual std::size_t onImageSize(Pt::ssize_t width, Pt::ssize_t height,
251 std::size_t padding)
const override;
253 virtual PixelBase* onCreatePixel(
Pt::uint8_t* data,
const ViewBase& view,
254 Pt::ssize_t x, Pt::ssize_t y,
255 PixelStorage& store)
const override;
258 template <
typename BasePtr>
259 static BasePtr getPixel(
const ViewBase& view, BasePtr base,
260 Pt::ssize_t xpos, Pt::ssize_t ypos)
262 base += ypos * view.stride();
263 base += xpos * PixelWidth;
267 template <
typename BasePtr>
268 static BasePtr advance(
const ViewBase& view, BasePtr base)
270 return base + PixelWidth;
273 template <
typename BasePtr>
274 static BasePtr advance(
const ViewBase& view, BasePtr base, Pt::ssize_t n)
276 return base + n * PixelWidth;
279 template <
typename BasePtr>
280 static BasePtr skipPadding(
const ViewBase& view, BasePtr base)
282 Pt::ssize_t w = view.width() * PixelWidth;
283 Pt::ssize_t off = view.stride() - w;
287 template <
typename BasePtr>
288 static BasePtr advanceLines(
const ViewBase& view, BasePtr base, Pt::ssize_t n)
290 return base + n * view.stride();
297 static void getColors(
const Pt::uint8_t* p, Gfx::ColorF* colors, std::size_t n);
299 static void getColors(
const Pt::uint8_t* p, Color* colors, std::size_t n);
301 static void assign(
Pt::uint8_t* to,
const Color& from);
303 static void assign(
Pt::uint8_t* to,
const ColorF& c);
305 static void fill(
Pt::uint8_t* to, std::size_t length,
const Color& c);
307 static void fill(
Pt::uint8_t* to, std::size_t length,
const ColorF& c);
309 static void assign(
Pt::uint8_t* to,
const Color* colors, std::size_t length);
311 static void assign(
Pt::uint8_t* to,
const ColorF* colors, std::size_t length);
338 #include <Pt/Gfx/Argb32.hpp>