Skip to content

Commit 65d28ab

Browse files
author
Olivier Poitrey
committed
Fix CGBitmapContextCreate errors (fix SDWebImage#204)
1 parent 6df9f76 commit 65d28ab

File tree

1 file changed

+7
-26
lines changed

1 file changed

+7
-26
lines changed

SDWebImage/SDWebImageDecoder.m

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -96,36 +96,17 @@ @implementation UIImage (ForceDecode)
9696

9797
+ (UIImage *)decodedImageWithImage:(UIImage *)image
9898
{
99-
CGImageRef imageRef = image.CGImage;
100-
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
101-
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
102-
99+
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(image.CGImage);
103100
BOOL imageHasAlphaInfo = (alphaInfo != kCGImageAlphaNone &&
104101
alphaInfo != kCGImageAlphaNoneSkipFirst &&
105102
alphaInfo != kCGImageAlphaNoneSkipLast);
106103

107-
int bytesPerPixel = alphaInfo != kCGImageAlphaNone ? 4 : 3;
108-
CGBitmapInfo bitmapInfo = imageHasAlphaInfo ? kCGImageAlphaPremultipliedLast : alphaInfo;
109-
110-
CGContextRef context = CGBitmapContextCreate(NULL,
111-
CGImageGetWidth(imageRef),
112-
CGImageGetHeight(imageRef),
113-
8,
114-
// Just always return width * bytesPerPixel will be enough
115-
CGImageGetWidth(imageRef) * bytesPerPixel,
116-
// System only supports RGB, set explicitly
117-
colorSpace,
118-
bitmapInfo);
119-
CGColorSpaceRelease(colorSpace);
120-
if (!context) return nil;
121-
122-
CGRect rect = (CGRect){CGPointZero,{CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)}};
123-
CGContextDrawImage(context, rect, imageRef);
124-
CGImageRef decompressedImageRef = CGBitmapContextCreateImage(context);
125-
CGContextRelease(context);
126-
127-
UIImage *decompressedImage = [[UIImage alloc] initWithCGImage:decompressedImageRef scale:image.scale orientation:image.imageOrientation];
128-
CGImageRelease(decompressedImageRef);
104+
UIGraphicsBeginImageContextWithOptions(image.size, !imageHasAlphaInfo, 0);
105+
CGRect rect = (CGRect){.origin = CGPointZero, .size = image.size};
106+
[image drawInRect:rect];
107+
UIImage *decompressedImage = UIGraphicsGetImageFromCurrentImageContext();
108+
UIGraphicsEndImageContext();
109+
129110
return SDWIReturnAutoreleased(decompressedImage);
130111
}
131112

0 commit comments

Comments
 (0)