diff options
Diffstat (limited to 'include/core/Image.hpp')
-rw-r--r-- | include/core/Image.hpp | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/include/core/Image.hpp b/include/core/Image.hpp new file mode 100644 index 0000000..cbe3c72 --- /dev/null +++ b/include/core/Image.hpp @@ -0,0 +1,139 @@ +#ifndef IMAGE_H +#define IMAGE_H + +#if defined(_WIN32) +# ifdef _GD_CPP_CORE_API_IMPL +# define GD_CPP_CORE_API __declspec(dllexport) +# else +# define GD_CPP_CORE_API __declspec(dllimport) +# endif +#else +# define GD_CPP_CORE_API +#endif + +#include "Defs.hpp" + +#include "Vector2.hpp" +#include "Rect2.hpp" +#include "Color.hpp" +#include "String.hpp" + +#include <godot/godot_image.h> + +namespace godot { + +class PoolByteArray; + +class GD_CPP_CORE_API Image { + godot_image _godot_image; +public: + + enum Format { + + FORMAT_L8, //luminance + FORMAT_LA8, //luminance-alpha + FORMAT_R8, + FORMAT_RG8, + FORMAT_RGB8, + FORMAT_RGBA8, + FORMAT_RGB565, //16 bit + FORMAT_RGBA4444, + FORMAT_RGBA5551, + FORMAT_RF, //float + FORMAT_RGF, + FORMAT_RGBF, + FORMAT_RGBAF, + FORMAT_RH, //half float + FORMAT_RGH, + FORMAT_RGBH, + FORMAT_RGBAH, + FORMAT_DXT1, //s3tc bc1 + FORMAT_DXT3, //bc2 + FORMAT_DXT5, //bc3 + FORMAT_ATI1, //bc4 + FORMAT_ATI2, //bc5 + FORMAT_BPTC_RGBA, //btpc bc6h + FORMAT_BPTC_RGBF, //float / + FORMAT_BPTC_RGBFU, //unsigned float + FORMAT_PVRTC2, //pvrtc + FORMAT_PVRTC2A, + FORMAT_PVRTC4, + FORMAT_PVRTC4A, + FORMAT_ETC, //etc1 + FORMAT_ETC2_R11, //etc2 + FORMAT_ETC2_R11S, //signed, NOT srgb. + FORMAT_ETC2_RG11, + FORMAT_ETC2_RG11S, + FORMAT_ETC2_RGB8, + FORMAT_ETC2_RGBA8, + FORMAT_ETC2_RGB8A1, + FORMAT_MAX + }; + + enum Interpolation { + + INTERPOLATE_NEAREST, + INTERPOLATE_BILINEAR, + INTERPOLATE_CUBIC, + /* INTERPOLATE GAUSS */ + }; + + enum CompressMode { + COMPRESS_16BIT, + COMPRESS_S3TC, + COMPRESS_PVRTC2, + COMPRESS_PVRTC4, + COMPRESS_ETC, + COMPRESS_ETC2 + }; + + + Image(); + + Image(const int width, const int height, const bool mipmaps, const Format format); + + void blit_rect(const Image& src, const Rect2& src_rect, const Vector2& dest = Vector2(0, 0)); + + void brush_transfer(const Image& src, const Image& brush, const Vector2& pos = Vector2(0, 0)); + + Image brushed(const Image& src, const Image& brush, const Vector2& pos = Vector2(0, 0)); + + Image compressed(const Format format); + + Image converted(const Format format); + + Image decompressed(); + + bool empty() const; + + void fix_alpha_edges(); + + PoolByteArray get_data(); + + + Format get_format() const; + + int get_height() const; + + Color get_pixel(const int x, const int y, const int mipmap_level = 0); + + Image get_rect(const Rect2& area = Rect2()); + + Rect2 get_used_rect() const; + + int get_width() const; + + Error load(const String& path); + + void put_pixel(const int x, const int y, const Color& color, int mipmap_level = 0); + + Image resized(const int x, const int y, const Interpolation interpolation = INTERPOLATE_NEAREST); + + Error save_png(const String& path); + + ~Image(); +}; + +} + +#endif // IMAGE_H |