--- /dev/null
+#include "image.hpp"
+
+Image::Image(const std::string &path) {
+ auto provider = CGDataProviderCreateWithFilename(path.c_str());
+ std::ifstream file(path);
+ long magic;
+ file.read((char*)&magic, 8);
+ file.close();
+
+ CGImageRef ref;
+
+ if (magic == 0x0a1a0a0d474e5089) // png magic number
+ ref = CGImageCreateWithPNGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
+ else
+ ref = CGImageCreateWithJPEGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
+
+ _width = CGImageGetWidth(ref), _height = CGImageGetHeight(ref);
+
+ dataRef = CGDataProviderCopyData(CGImageGetDataProvider(ref));
+ CGImageRelease(ref);
+
+}
+
+unsigned char *Image::data() {
+ return (unsigned char*) CFDataGetBytePtr(dataRef);
+}
+
+GLfloat Image::width() const { return _width; }
+GLfloat Image::height() const { return _height; }
+
+Image::~Image() { CFRelease(dataRef); }