2 #include <ImageIO/ImageIO.h>
4 Image::Image(const std::string &path) {
5 CFStringRef str = CFStringCreateWithCString(NULL, path.c_str(), kCFStringEncodingUTF8);
6 CFURLRef url = CFURLCreateWithFileSystemPath(NULL, str, kCFURLPOSIXPathStyle, false);
7 CGImageSourceRef source = CGImageSourceCreateWithURL(url, NULL);
8 CGImageRef ref = CGImageSourceCreateImageAtIndex(source, 0, NULL);
9 /* auto provider = CGDataProviderCreateWithFilename(path.c_str()); */
10 /* std::ifstream file(path); */
12 /* file.read((char*)&magic, 8); */
17 /* if (magic == 0x0a1a0a0d474e5089) // png magic number */
18 /* ref = CGImageCreateWithPNGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault); */
20 /* ref = CGImageCreateWithJPEGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault); */
22 _width = CGImageGetWidth(ref), _height = CGImageGetHeight(ref);
23 info = CGImageGetBitmapInfo(ref);
24 alphaInfo = CGImageGetAlphaInfo(ref);
25 colorSpace = CGImageGetColorSpace(ref);
27 dataRef = CGDataProviderCopyData(CGImageGetDataProvider(ref));
32 unsigned char *Image::data() const {
33 return (unsigned char*) CFDataGetBytePtr(dataRef);
36 GLfloat Image::width() const { return _width; }
37 GLfloat Image::height() const { return _height; }
39 GLuint Image::format() const {
40 if (CGColorSpaceGetModel(colorSpace) == kCGColorSpaceModelMonochrome) {
41 return GL_DEPTH_COMPONENT;
43 if (alphaInfo == kCGImageAlphaNone) {
49 Image::~Image() { CFRelease(dataRef); }