22 #ifndef FIFE_VIDEO_IMAGE_H
23 #define FIFE_VIDEO_IMAGE_H
36 #include "util/base/fife_stdint.h"
37 #include "util/base/resourceclass.h"
38 #include "util/resource/resource.h"
39 #include "util/structures/point.h"
40 #include "util/structures/rect.h"
46 virtual ~AbstractImage() {}
51 virtual SDL_Surface* getSurface() = 0;
57 virtual unsigned int getWidth()
const = 0;
61 virtual unsigned int getHeight()
const = 0;
66 virtual const Rect& getArea() = 0;
70 virtual bool putPixel(
int x,
int y,
int r,
int g,
int b,
int a = 255) = 0;
74 virtual void drawLine(
const Point& p1,
const Point& p2,
int r,
int g,
int b,
int a = 255) = 0;
78 virtual void drawTriangle(
const Point& p1,
const Point& p2,
const Point& p3,
int r,
int g,
int b,
int a = 255) = 0;
82 virtual void drawRectangle(
const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
86 virtual void fillRectangle(
const Point& p, uint16_t w, uint16_t h, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) = 0;
90 virtual void drawQuad(
const Point& p1,
const Point& p2,
const Point& p3,
const Point& p4,
int r,
int g,
int b,
int a = 255) = 0;
94 virtual void drawVertex(
const Point& p,
const uint8_t size,
int r,
int g,
int b,
int a = 255) = 0;
98 virtual void drawLightPrimitive(
const Point& p, uint8_t intensity,
float radius,
int subdivisions,
float xstretch,
float ystretch, uint8_t red, uint8_t green, uint8_t blue) = 0;
102 virtual void getPixelRGBA(
int x,
int y, uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a) = 0;
108 virtual void pushClipArea(
const Rect& cliparea,
bool clear=
true) = 0;
113 virtual void popClipArea() = 0;
118 virtual const Rect& getClipArea()
const = 0;
122 virtual void saveImage(
const std::string& filename) = 0;
129 virtual void setAlphaOptimizerEnabled(
bool enabled) = 0;
133 virtual bool isAlphaOptimizerEnabled() = 0;
144 Image(SDL_Surface* surface);
151 Image(
const uint8_t* data,
unsigned int width,
unsigned int height);
163 virtual void render(
const Rect& rect, SDL_Surface* dst,
unsigned char alpha = 255) = 0;
170 void render(
const Rect& rect,
unsigned char alpha = 255);
178 SDL_Surface* getSurface() {
return m_surface; }
179 unsigned int getWidth()
const;
180 unsigned int getHeight()
const;
181 const Rect& getArea();
182 void setXShift(
int xshift);
183 inline int getXShift()
const {
186 void setYShift(
int yshift);
187 inline int getYShift()
const {
190 void getPixelRGBA(
int x,
int y, uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a);
191 void pushClipArea(
const Rect& cliparea,
bool clear=
true);
193 const Rect& getClipArea()
const;
194 void setAlphaOptimizerEnabled(
bool enabled) { m_isalphaoptimized = enabled; }
195 bool isAlphaOptimizerEnabled() {
return m_isalphaoptimized; }
203 virtual void saveAsPng(
const std::string& filename, SDL_Surface& surface);
210 SDL_Surface* m_surface;
221 std::stack<ClipInfo> m_clipstack;
225 bool m_isalphaoptimized;
228 void reset(SDL_Surface* surface);