summaryrefslogtreecommitdiff
path: root/libcore/imageloader.h
diff options
context:
space:
mode:
Diffstat (limited to 'libcore/imageloader.h')
-rw-r--r--libcore/imageloader.h103
1 files changed, 92 insertions, 11 deletions
diff --git a/libcore/imageloader.h b/libcore/imageloader.h
index 2a148be..9b74f98 100644
--- a/libcore/imageloader.h
+++ b/libcore/imageloader.h
@@ -1,23 +1,104 @@
#ifndef __NOPACITY_IMAGELOADER_H
#define __NOPACITY_IMAGELOADER_H
-#define X_DISPLAY_MISSING
-
+#include <cairo.h>
+#include <librsvg/rsvg.h>
+#include <jpeglib.h>
+#include <setjmp.h>
#include <vdr/osd.h>
-#include <vdr/skins.h>
-#include <Magick++.h>
-#include "imagemagickwrapper.h"
+#include <vdr/tools.h>
+
+//
+// Image importers
+//
+class cImageImporter {
+public:
+ cImageImporter() {};
+ virtual ~cImageImporter() {};
+ virtual bool LoadImage(const char *path) {};
+ virtual void DrawToCairo(cairo_t *cr) {};
+ virtual void GetImageSize(int &width, int &height) {};
+};
-using namespace Magick;
+// 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;
+};
-class cImageLoader : public cImageMagickWrapper {
+// 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-turbo has to be compiled with 8-bit samples!
+#endif
+
+struct my_error_mgr {
+ struct jpeg_error_mgr pub; // "public" fields
+ jmp_buf setjmp_buffer; // for return to caller
+};
+
+METHODDEF(void)
+my_error_exit(j_common_ptr cinfo) {
+ // cinfo->err really points to a my_error_mgr struct, so coerce pointer
+ my_error_mgr *myerr = (my_error_mgr*) cinfo->err;
+
+ // Always display the message.
+ // We could postpone this until after returning, if we chose.
+ (*cinfo->err->output_message) (cinfo);
+
+ // Return control to the setjmp point
+ longjmp(myerr->setjmp_buffer, 1);
+}
+
+METHODDEF(void)
+my_output_message(j_common_ptr cinfo) {
+ char buf[JMSG_LENGTH_MAX];
+ cinfo->err->format_message(cinfo, buf);
+ dsyslog("skindesigner: libjpeg error: %s", buf);
+}
+
+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;
+};
+
+
+
+class cImageLoader {
+private:
+ cImageImporter *importer = NULL;
public:
cImageLoader();
- ~cImageLoader();
- cImage GetImage();
- bool LoadImage(const char *path, int width, int height);
+ 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);
void DeterminateChannelLogoSize(int &width, int &height);
-private:
};
#endif //__NOPACITY_IMAGELOADER_H