29#ifndef PT_GFX_IMAGE_FORMAT_H
30#define PT_GFX_IMAGE_FORMAT_H
32#include <Pt/Gfx/Api.h>
33#include <Pt/Gfx/ViewBase.h>
34#include <Pt/Gfx/ImageTraits.h>
35#include <Pt/Gfx/PixelBase.h>
36#include <Pt/Gfx/Color.h>
37#include <Pt/TypeTraits.h>
74 friend struct ImageTraitsF;
77 explicit ImageFormat(
size_t pixelStride)
78 : _pixelStride(pixelStride)
81 virtual ~ImageFormat()
85 Pt::ssize_t x, Pt::ssize_t y,
86 PixelStorage& store)
const
88 return onCreatePixel(data, view, x, y, store);
91 bool operator==(
const ImageFormat& a)
const
93 return onGetType() == a.onGetType();
96 bool operator!=(
const ImageFormat& a)
const
98 return ! (*
this == a);
101 const std::type_info& type()
const
107 PT_GFX_API
static const ImageFormat& get(
int type = 0);
109 PT_GFX_API
static const ImageFormat& rgb16();
111 PT_GFX_API
static const ImageFormat& rgb32();
113 PT_GFX_API
static const ImageFormat& argb32();
116 virtual std::unique_ptr<ImageFormat> onClone()
const
121 virtual const std::type_info& onGetType()
const = 0;
123 virtual std::size_t onImageSize(Pt::ssize_t width, Pt::ssize_t height,
124 std::size_t padding)
const = 0;
127 Pt::ssize_t x, Pt::ssize_t y,
128 PixelStorage& store)
const = 0;
130 inline const void* r0()
const
133 inline const void* r1()
const
136 inline const void* r2()
const
140 const std::size_t _pixelStride;
156 static std::size_t pixelStride(
const ImageFormat& format)
158 return format._pixelStride;
161 static std::size_t imageSize(
const ImageFormat& format, Pt::ssize_t width, Pt::ssize_t height,
164 return format.onImageSize(width, height, padding);
167 static std::unique_ptr<ImageFormat> clone(
const ImageFormat& format)
169 return format.onClone();
176 typedef Gfx::Pixel<ColorF> Pixel;
177 typedef Gfx::ConstPixel<ColorF> ConstPixel;
179 static std::size_t pixelStride(
const ImageFormat& format)
181 return format._pixelStride;
184 static std::size_t imageSize(
const ImageFormat& format, Pt::ssize_t width, Pt::ssize_t height,
187 return format.onImageSize(width, height, padding);
190 static std::unique_ptr<ImageFormat> clone(
const ImageFormat& format)
192 return format.onClone();
217template <
typename ColorT>
220 template <
typename C>
221 friend class ConstPixel;
225 typedef ColorT ColorType;
228 template <
typename T>
229 Pixel(T& view, Pt::ssize_t x, Pt::ssize_t y);
231 Pixel(
const Pixel& p);
235 Pixel& operator=(
const Pixel&) =
delete;
237 Pixel& operator=(
const ColorT& color)
239 _pixel->assign(color);
243 template <
typename T>
244 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
246 void reset(
const Pixel& p);
255 {
return _pixel->view(); }
261 {
return _pixel->base(); }
264 {
return _pixel->base(); }
273 _pixel->skipPadding();
276 void advance(Pt::ssize_t n)
281 void advanceLines(Pt::ssize_t n)
283 _pixel->advanceLines(n);
286 ColorT getColor()
const
288 return _pixel->getColor<ColorT>();
291 void getColors(ColorT* colors, std::size_t length)
const
293 _pixel->getColors(colors, length);
296 void assign(
const Pixel& p);
298 void assign(
const ConstPixel<ColorT>& p);
300 void assign(
const Pixel& p, std::size_t length);
302 void assign(
const ConstPixel<ColorT>& p, std::size_t length);
304 void assign(
const ColorT* colors, std::size_t length)
306 _pixel->assign(colors, length);
309 void fill(std::size_t n,
const ColorT& color)
311 _pixel->fill(n, color);
314 bool equals(
const Pixel& p)
const
316 return _pixel->base() == p.base();
319 bool equals(
const ConstPixel<ColorT>& p)
const;
322 template <
typename PixelT>
323 void assignPixels(
const PixelT& p, std::size_t length);
327 PixelStorage _storage;
343template <
typename ColorT>
346 template <
typename C>
351 typedef ColorT ColorType;
354 template <
typename T>
355 ConstPixel(
const T& view, Pt::ssize_t x, Pt::ssize_t y);
357 template <
typename T>
358 ConstPixel(T& view, Pt::ssize_t x, Pt::ssize_t y);
360 ConstPixel(
const ConstPixel& p);
362 ConstPixel(
const Pixel<ColorT>& p);
366 ConstPixel& operator=(
const ConstPixel&) =
delete;
368 template <
typename T>
369 void reset(
const T& view, Pt::ssize_t x, Pt::ssize_t y);
371 template <
typename T>
372 void reset(T& view, Pt::ssize_t x, Pt::ssize_t y);
374 void reset(
const ConstPixel& p);
376 void reset(
const Pixel<ColorT>& p);
385 {
return _pixel->view(); }
388 {
return _pixel->base(); }
397 _pixel->skipPadding();
400 void advance(Pt::ssize_t n)
405 void advanceLines(Pt::ssize_t n)
407 _pixel->advanceLines(n);
410 ColorT getColor()
const
412 return _pixel->getColor<ColorT>();
415 void getColors(ColorT* colors, std::size_t length)
const
417 _pixel->getColors(colors, length);
420 bool equals(
const ConstPixel& p)
const
422 return _pixel->base() == p.base();
425 bool equals(
const Pixel<ColorT>& p)
const
427 return _pixel->base() == p.base();
432 PixelStorage _storage;
440#include <Pt/Gfx/ImageFormat.hpp>
Read-only cursor to one pixel.
Definition ImageFormat.h:345
Pixel base class.
Definition PixelBase.h:52
Cursor to one pixel.
Definition ImageFormat.h:219
Width, height and stride of an image or view.
Definition ViewBase.h:50
uint_type uint8_t
Unsigned 8-bit integer type.
Definition Api-Types.h:24
Graphics and imaging services.
Definition Api-Argb32Image.h:12
Core module.
Definition Allocator.h:33
Image traits.
Definition ImageTraits.h:44