nuclear@0: #ifndef IMAGE_H_ nuclear@0: #define IMAGE_H_ nuclear@0: nuclear@0: class Image { nuclear@0: private: nuclear@0: mutable int tex_width, tex_height; nuclear@0: mutable unsigned int tex; nuclear@0: mutable bool tex_valid; nuclear@0: nuclear@0: public: nuclear@0: int width, height; nuclear@0: unsigned char *pixels; nuclear@0: nuclear@0: Image(); nuclear@0: ~Image(); nuclear@0: nuclear@0: Image(const Image &img); nuclear@0: Image &operator =(const Image &img); nuclear@0: nuclear@0: bool create(int width, int height, unsigned char *pixels = 0); nuclear@0: void destroy(); nuclear@0: nuclear@0: bool load(const char *fname); nuclear@0: bool save(const char *fname) const; nuclear@0: nuclear@0: unsigned int texture() const; nuclear@0: int texture_width() const; nuclear@0: int texture_height() const; nuclear@0: nuclear@0: void invalidate_texture(); nuclear@0: }; nuclear@0: nuclear@0: void clear_image(Image *img); nuclear@0: void clear_image(Image *img, float r, float g, float b, float a = 255); nuclear@0: void clear_image_alpha(Image *img, float a); nuclear@0: nuclear@0: enum ImgCombine { nuclear@0: IMG_OP_ADD, nuclear@0: IMG_OP_SUB, nuclear@0: IMG_OP_MUL, nuclear@0: IMG_OP_LERP nuclear@0: }; nuclear@0: nuclear@0: bool combine_image(Image *dest, const Image *aimg, const Image *bimg, ImgCombine op = IMG_OP_LERP, float t = 0.5); nuclear@0: nuclear@0: void convolve_horiz_image(Image *dest, float *kern, int ksz, float scale = 0.0); nuclear@0: void convolve_vert_image(Image *dest, float *kern, int ksz, float scale = 0.0); nuclear@0: nuclear@0: #endif // IMAGE_H_