Reflection
[opengl.git] / image.cpp
1 #include "image.hpp"
2
3 Image::Image(const std::string &path) {
4         auto provider = CGDataProviderCreateWithFilename(path.c_str());
5         std::ifstream file(path);
6         long magic;
7         file.read((char*)&magic, 8);
8         file.close();
9
10         CGImageRef ref;
11
12         if (magic == 0x0a1a0a0d474e5089) // png magic number
13                 ref = CGImageCreateWithPNGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
14         else
15                 ref = CGImageCreateWithJPEGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
16
17         _width = CGImageGetWidth(ref), _height = CGImageGetHeight(ref);
18
19         dataRef = CGDataProviderCopyData(CGImageGetDataProvider(ref));
20         CGImageRelease(ref);
21
22 }
23
24 unsigned char *Image::data() {
25         return (unsigned char*) CFDataGetBytePtr(dataRef);
26 }
27
28 GLfloat Image::width() const { return _width; }
29 GLfloat Image::height() const { return _height; }
30
31 Image::~Image() { CFRelease(dataRef); }