3 Image::Image(const std::string &path) {
4 auto provider = CGDataProviderCreateWithFilename(path.c_str());
5 std::ifstream file(path);
7 file.read((char*)&magic, 8);
12 if (magic == 0x0a1a0a0d474e5089) // png magic number
13 ref = CGImageCreateWithPNGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
15 ref = CGImageCreateWithJPEGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
17 _width = CGImageGetWidth(ref), _height = CGImageGetHeight(ref);
19 dataRef = CGDataProviderCopyData(CGImageGetDataProvider(ref));
24 unsigned char *Image::data() {
25 return (unsigned char*) CFDataGetBytePtr(dataRef);
28 GLfloat Image::width() const { return _width; }
29 GLfloat Image::height() const { return _height; }
31 Image::~Image() { CFRelease(dataRef); }