Incrementally Reading an Image
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
[self.mutableResponseData appendData:data];
CGImageSourceUpdateData(self.imageSourceRef,
(__bridge CFDataRef)self.mutableResponseData,
[self.mutableResponseData length]
[dataTask countOfBytesExpectedToReceive]);
if (CGSizeEqualToSize(self.imageSize, CGSizeZero))
{
NSDictionary *properties =
(__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(self.imageSourceRef,
0, NULL);
if (properties)
{
NSNumber *width = properties[(__bridge id)kCGImagePropertyPixelWidth];
NSNumber *height = properties[(__bridge id)kCGImagePropertyPixelHeight];
if (width && height)
{
self.imageSize = CGSizeMake([width floatValue],
}
}
}
CGImageRef imageRef =
CGImageSourceCreateImageAtIndex(self.imageSourceRef, 0,
NULL);
UIImage *image = [UIImage imageWithCGImage:imageRef];
CFRelease(imageRef);
dispatch_async(dispatch_get_main_queue(), ^{
// delete or block callback to update with image
});
}