我有一种方法可以通过剪切(即使某些像素变成透明)任何亮度高于或低于特定亮度的黑白图像来进行屏蔽。结果将是相同的黑白图像,但是所有高于70%或低于25%亮度(或您选择的任何值)的内容都会变为透明。
在iOS 11上它运行得很完美,但是在iOS 12上它瘫痪了。现在每次都返回原始的、实心的图像,没有做任何修改。
-(UIImage*)imageWithLumaMaskFromDark:(CGFloat)lumaFloor toLight:(CGFloat)lumaCeil {
// inputs range from 0 - 255
CGImageRef rawImageRef = self.CGImage;
const CGFloat colorMasking[6] = {lumaFloor, lumaCeil, lumaFloor, lumaCeil, lumaFloor, lumaCeil};
UIGraphicsBeginImageContext(self.size);
CGImageRef maskedImageRef = CGImageCreateWithMaskingColors(rawImageRef, colorMasking);
{
//if in iphone
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, self.size.height);
CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
}
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, self.size.width, self.size.height), maskedImageRef);
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
CGImageRelease(maskedImageRef);
UIGraphicsEndImageContext();
return result;
}
我是一名有经验的iOS开发者,但对CGImage/CGContext完全不熟悉。有谁能帮助我弄清楚这个方法在iOS 12中可能出了什么问题,并告诉我如何修复它吗?