29 #ifndef PT_GFX_RGB32_H
30 #define PT_GFX_RGB32_H
32 #include <Pt/Gfx/Api.h>
33 #include <Pt/Gfx/ImageFormat.h>
34 #include <Pt/Gfx/Color.h>
60 std::memcpy( &_value, base,
sizeof(
uint32_t) );
77 return (_value & 0x00FF0000) >> 16;
82 return (_value & 0x0000FF00) >> 8;
87 return _value & 0x000000FF;
92 _value = (_value & 0x00FFFFFF) | (
uint32_t(a) << 24);
97 _value = (_value & 0xFF00FFFF) | (
uint32_t(pr) << 16);
102 _value = (_value & 0xFFFF00FF) | (
uint32_t(pg) << 8);
107 _value = (_value & 0xFFFFFF00) |
uint32_t(pb);
133 template <
typename T>
134 Rgb32Pixel(T& view, Pt::ssize_t x, Pt::ssize_t y);
146 template <
typename T>
147 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
151 const ViewBase& view()
const
188 void advance(Pt::ssize_t n);
190 void advanceLines(Pt::ssize_t n);
196 void assign(
const Rgb32Pixel& p, std::size_t length);
200 void assign(
const Color* colors, std::size_t length);
202 void assign(
const Rgb32Color* colors, std::size_t length);
204 void getColors(
Color* colors, std::size_t length)
const;
219 const ViewBase* _view;
235 Pt::ssize_t x, Pt::ssize_t y);
238 template <
typename T>
241 template <
typename T>
252 template <
typename T>
253 void reset(
const T& view, Pt::ssize_t x, Pt::ssize_t y);
255 template <
typename T>
256 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
262 const ViewBase& view()
const
288 void advance(Pt::ssize_t n);
290 void advanceLines(Pt::ssize_t n);
292 void getColors(
Color* colors, std::size_t length)
const;
303 const ViewBase* _view;
316 static const unsigned PixelWidth = 4;
323 static const Rgb32& get()
341 std::size_t imageSize(std::size_t width, std::size_t height,
342 std::size_t padding)
const
344 std::size_t stride = (width * 4) + padding;
345 std::size_t n = stride * height;
350 virtual std::unique_ptr<ImageFormat> onClone()
const override
352 return std::unique_ptr<ImageFormat>(
new Rgb32);
355 virtual const std::type_info& onGetType()
const override
357 return typeid(*this);
360 virtual std::size_t onImageSize(Pt::ssize_t width, Pt::ssize_t height,
361 std::size_t padding)
const override;
363 virtual PixelBase* onCreatePixel(
Pt::uint8_t* data,
const ViewBase& view,
364 Pt::ssize_t x, Pt::ssize_t y,
365 PixelStorage& store)
const override;
368 template <
typename BasePtr>
369 static BasePtr getPixel(
const ViewBase& view, BasePtr base,
370 Pt::ssize_t xpos, Pt::ssize_t ypos)
372 base += ypos * view.stride();
373 base += xpos * PixelWidth;
377 template <
typename BasePtr>
378 static BasePtr advance(
const ViewBase& view, BasePtr base)
380 return base + PixelWidth;
383 template <
typename BasePtr>
384 static BasePtr advance(
const ViewBase& view, BasePtr base, Pt::ssize_t n)
386 return base + n * PixelWidth;
389 template <
typename BasePtr>
390 static BasePtr skipPadding(
const ViewBase& view, BasePtr base)
392 Pt::ssize_t w = view.width() * PixelWidth;
393 Pt::ssize_t off = view.stride() - w;
397 template <
typename BasePtr>
398 static BasePtr advanceLines(
const ViewBase& view, BasePtr base, Pt::ssize_t n)
400 return base + n * view.stride();
403 static Rgb32Color getRgb32Color(
const Pt::uint8_t* p);
409 static void getColors(
const Pt::uint8_t* p, Rgb32Color* colors, std::size_t n);
411 static void getColors(
const Pt::uint8_t* p, Color* colors, std::size_t n);
413 static void getColors(
const Pt::uint8_t* p, Gfx::ColorF* colors, std::size_t n);
415 static void assign(
Pt::uint8_t* to,
const Color& from);
417 static void assign(
Pt::uint8_t* to,
const ColorF& c);
419 static void fill(
Pt::uint8_t* to, std::size_t length,
const Rgb32Color& c);
421 static void fill(
Pt::uint8_t* to, std::size_t length,
const Color& c);
423 static void fill(
Pt::uint8_t* to, std::size_t length,
const ColorF& c);
425 static void assign(
Pt::uint8_t* to,
const Rgb32Color* colors, std::size_t length);
427 static void assign(
Pt::uint8_t* to,
const Color* colors, std::size_t length);
429 static void assign(
Pt::uint8_t* to,
const ColorF* colors, std::size_t length);
460 return (a << 24) | (r << 16) | (g << 8) | b;
484 #include <Pt/Gfx/Rgb32.hpp>