X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=image.cpp;fp=image.cpp;h=71114b0d85c8f239800602b3e0e1fcfe0431493b;hp=0000000000000000000000000000000000000000;hb=c44e69ec78367fb2957324026894aef970f2481a;hpb=85f8f7278f24fe73fef1a19174376b155319072f diff --git a/image.cpp b/image.cpp new file mode 100644 index 0000000..71114b0 --- /dev/null +++ b/image.cpp @@ -0,0 +1,31 @@ +#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); }