godot-cpp/include/core/Image.hpp

140 lines
2.6 KiB
C++

#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