Skip to content

Commit d70d7fd

Browse files
matrushfacebook-github-bot
authored andcommitted
Adopt UIGraphicsImageRenderer API
Summary: Apple suggested to this new API on iOS 10+. > // Any new bitmap drawing code is encouraged to use UIGraphicsImageRenderer in lieu of this API. WWDC18 Reference: https://developer.apple.com/videos/play/wwdc2018/219/ > Use UIGraphicsImageRenderer to create and draw to an image buffer Supports Wide Color, unlike UIGraphicsBeginImageContext() Combine with UIImageView for efficient offscreen rendering Per https://nshipster.com/image-resizing/#performance-benchmarks, the new API runs even faster than the C version, probably due to more smart context reuses/management. Changelog: [iOS][Changed] - Adopt UIGraphicsImageRenderer API Reviewed By: philIip Differential Revision: D35699584 fbshipit-source-id: 7a1e2109d5e121fb396c1014f4ed0a892211b0cc
1 parent 7454044 commit d70d7fd

File tree

6 files changed

+270
-265
lines changed

6 files changed

+270
-265
lines changed

Libraries/Image/RCTImageBlurUtils.m

+8-5
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
if (CGImageGetBitsPerPixel(imageRef) != 32 ||
2323
CGImageGetBitsPerComponent(imageRef) != 8 ||
2424
!((CGImageGetBitmapInfo(imageRef) & kCGBitmapAlphaInfoMask))) {
25-
UIGraphicsBeginImageContextWithOptions(inputImage.size, NO, inputImage.scale);
26-
[inputImage drawAtPoint:CGPointZero];
27-
imageRef = UIGraphicsGetImageFromCurrentImageContext().CGImage;
28-
UIGraphicsEndImageContext();
25+
UIGraphicsImageRendererFormat *const rendererFormat = [UIGraphicsImageRendererFormat defaultFormat];
26+
rendererFormat.scale = inputImage.scale;
27+
UIGraphicsImageRenderer *const renderer = [[UIGraphicsImageRenderer alloc] initWithSize:inputImage.size format:rendererFormat];
28+
29+
imageRef = [renderer imageWithActions:^(UIGraphicsImageRendererContext *_Nonnull context) {
30+
[inputImage drawAtPoint:CGPointZero];
31+
}].CGImage;
2932
}
3033

3134
vImage_Buffer buffer1, buffer2;
@@ -51,7 +54,7 @@
5154

5255
//create temp buffer
5356
vImage_Error tempBufferSize = vImageBoxConvolve_ARGB8888(&buffer1, &buffer2, NULL, 0, 0, boxSize, boxSize,
54-
NULL, kvImageGetTempBufferSize | kvImageEdgeExtend);
57+
NULL, kvImageGetTempBufferSize | kvImageEdgeExtend);
5558
if (tempBufferSize < 0) {
5659
free(buffer1.data);
5760
free(buffer2.data);

Libraries/Image/RCTImageUtils.m

+8-7
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,14 @@ BOOL RCTUpscalingRequired(CGSize sourceSize, CGFloat sourceScale,
370370
}
371371

372372
BOOL opaque = !RCTImageHasAlpha(image.CGImage);
373-
UIGraphicsBeginImageContextWithOptions(destSize, opaque, destScale);
374-
CGContextRef currentContext = UIGraphicsGetCurrentContext();
375-
CGContextConcatCTM(currentContext, transform);
376-
[image drawAtPoint:CGPointZero];
377-
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
378-
UIGraphicsEndImageContext();
379-
return result;
373+
UIGraphicsImageRendererFormat *const rendererFormat = [UIGraphicsImageRendererFormat defaultFormat];
374+
rendererFormat.opaque = opaque;
375+
rendererFormat.scale = destScale;
376+
UIGraphicsImageRenderer *const renderer = [[UIGraphicsImageRenderer alloc] initWithSize:destSize format:rendererFormat];
377+
return [renderer imageWithActions:^(UIGraphicsImageRendererContext *_Nonnull context) {
378+
CGContextConcatCTM(context.CGContext, transform);
379+
[image drawAtPoint:CGPointZero];
380+
}];
380381
}
381382

382383
BOOL RCTImageHasAlpha(CGImageRef image)

0 commit comments

Comments
 (0)