#ifndef __NOPACITY_IMAGELOADER_H #define __NOPACITY_IMAGELOADER_H #include #include #ifndef LIBRSVG_VERSION // Workaround for librsvg < 2.36.2 #include #endif #include #include #include #include // // Image importers // class cImageImporter { public: cImageImporter() {}; virtual ~cImageImporter() {}; virtual bool LoadImage(const char *path) { return false; }; virtual void DrawToCairo(cairo_t *cr) {}; virtual void GetImageSize(int &width, int &height) {}; }; // Image importer for PNG class cImageImporterPNG : public cImageImporter { public: cImageImporterPNG(); ~cImageImporterPNG(); bool LoadImage(const char *path); void DrawToCairo(cairo_t *cr); void GetImageSize(int &width, int &height); private: cairo_surface_t *surface; }; // Image importer for SVG class cImageImporterSVG : public cImageImporter { public: cImageImporterSVG(); ~cImageImporterSVG(); bool LoadImage(const char *path); void DrawToCairo(cairo_t *cr); void GetImageSize(int &width, int &height); private: RsvgHandle *handle; }; // Image importer for JPG #if BITS_IN_JSAMPLE != 8 #error libjpeg has to be compiled with 8-bit samples! #endif class cImageImporterJPG : public cImageImporter { public: cImageImporterJPG(); ~cImageImporterJPG(); bool LoadImage(const char *path); void DrawToCairo(cairo_t *cr); void GetImageSize(int &width, int &height); private: j_decompress_ptr cinfo; FILE *infile; }; // // Image loader class // class cImageLoader { private: cImageImporter *importer; public: cImageLoader(); virtual ~cImageLoader(); cImage *CreateImage(int width, int height, bool preserveAspect = true); bool LoadImage(std::string Path, std::string FileName, std::string Extension); bool LoadImage(const char *fullpath); }; #endif //__NOPACITY_IMAGELOADER_H