From 345dfdf1ce5073f798410c579eb76f327f2a1acb Mon Sep 17 00:00:00 2001 From: Leonid Melnyk Date: Fri, 27 Sep 2024 13:12:25 +0200 Subject: [PATCH] Fix snapshot diff bug with resolution --- .../Categories/UIImage+Diff.m | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/iOSSnapshotTestCaseCore/Categories/UIImage+Diff.m b/src/iOSSnapshotTestCaseCore/Categories/UIImage+Diff.m index eea9459..0dc325c 100644 --- a/src/iOSSnapshotTestCaseCore/Categories/UIImage+Diff.m +++ b/src/iOSSnapshotTestCaseCore/Categories/UIImage+Diff.m @@ -41,16 +41,25 @@ - (UIImage *)fb_diffWithImage:(UIImage *)image if (!image) { return nil; } - CGSize imageSize = CGSizeMake(MAX(self.size.width, image.size.width), MAX(self.size.height, image.size.height)); + + CGFloat scaleFactor = self.scale / (MAX(self.scale, image.scale)); + CGAffineTransform scaleTransform = CGAffineTransformScale(CGAffineTransformIdentity, scaleFactor, scaleFactor); + CGSize scaledSize = CGSizeApplyAffineTransform(self.size, scaleTransform); + + CGFloat imageScaleFactor = image.scale / (MAX(self.scale, image.scale)); + CGAffineTransform imageScaleTransform = CGAffineTransformScale(CGAffineTransformIdentity, imageScaleFactor, imageScaleFactor); + CGSize imageScaledSize = CGSizeApplyAffineTransform(image.size, imageScaleTransform); + + CGSize imageSize = CGSizeMake(MAX(scaledSize.width, imageScaledSize.width), MAX(scaledSize.height, imageScaledSize.height)); UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0); CGContextRef context = UIGraphicsGetCurrentContext(); - [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)]; + [self drawInRect:CGRectMake(0, 0, scaledSize.width, scaledSize.height)]; CGContextSetAlpha(context, 0.5); CGContextBeginTransparencyLayer(context, NULL); - [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; + [image drawInRect:CGRectMake(0, 0, imageScaledSize.width, imageScaledSize.height)]; CGContextSetBlendMode(context, kCGBlendModeDifference); CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor); - CGContextFillRect(context, CGRectMake(0, 0, self.size.width, self.size.height)); + CGContextFillRect(context, CGRectMake(0, 0, scaledSize.width, scaledSize.height)); CGContextEndTransparencyLayer(context); UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();