Created
December 3, 2013 10:22
-
-
Save saiday/7767044 to your computer and use it in GitHub Desktop.
> System only supports RGB, set explicitly and prevent context error, if the downloaded image is not the supported format.
Inspired by @njdehoog
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "UIImage+Decompression.h" | |
@implementation UIImage (Decompression) | |
+ (UIImage *)decodedImageWithImage:(UIImage *)image | |
{ | |
CGImageRef imageRef = image.CGImage; | |
// System only supports RGB, set explicitly and prevent context error | |
// if the downloaded image is not the supported format | |
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); | |
CGContextRef context = CGBitmapContextCreate(NULL, | |
CGImageGetWidth(imageRef), | |
CGImageGetHeight(imageRef), | |
8, | |
// width * 4 will be enough because are in ARGB format, don't read from the image | |
CGImageGetWidth(imageRef) * 4, | |
colorSpace, | |
// kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little | |
// makes system don't need to do extra conversion when displayed. | |
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little); | |
CGColorSpaceRelease(colorSpace); | |
if ( ! context) { | |
return nil; | |
} | |
CGRect rect = (CGRect){CGPointZero, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)}; | |
CGContextDrawImage(context, rect, imageRef); | |
CGImageRef decompressedImageRef = CGBitmapContextCreateImage(context); | |
CGContextRelease(context); | |
UIImage *decompressedImage = [[UIImage alloc] initWithCGImage:decompressedImageRef]; | |
CGImageRelease(decompressedImageRef); | |
return decompressedImage; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment