X-Git-Url: https://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=image.cpp;h=6c09fa31caaca7335e18f302fb687d6393a85dc5;hp=e3c5cbdb81fe2355c63c9452b25f8a92adec68f9;hb=d381f617bef400fc157edf782008cafb018ed594;hpb=c0811ee866ca2b6d002c15394ea5d4b7a1067a80 diff --git a/image.cpp b/image.cpp index e3c5cbd..6c09fa3 100644 --- a/image.cpp +++ b/image.cpp @@ -6,7 +6,18 @@ Image::Image(const std::string &path) { CFURLRef url = CFURLCreateWithFileSystemPath(NULL, str, kCFURLPOSIXPathStyle, false); CGImageSourceRef source = CGImageSourceCreateWithURL(url, NULL); CGImageRef ref = CGImageSourceCreateImageAtIndex(source, 0, NULL); + initWithImageRef(ref); + CGImageRelease(ref); +} +Image::Image(const unsigned char *data, size_t length) { + CGDataProviderRef dpRef = CGDataProviderCreateWithData(NULL, data, length, NULL); + CGImageRef ref = CGImageCreateWithJPEGDataProvider(dpRef, NULL, false, kCGRenderingIntentDefault); + initWithImageRef(ref); + CGImageRelease(ref); +} + +void Image::initWithImageRef(CGImageRef ref) { _width = CGImageGetWidth(ref), _height = CGImageGetHeight(ref); info = CGImageGetBitmapInfo(ref); alphaInfo = CGImageGetAlphaInfo(ref); @@ -14,8 +25,6 @@ Image::Image(const std::string &path) { bitsPerComponent = CGImageGetBitsPerComponent(ref); dataRef = CGDataProviderCopyData(CGImageGetDataProvider(ref)); - CGImageRelease(ref); - } unsigned char *Image::data() const {