我有一种通过剪切(即使透明)任何高于或低于某一亮度的像素来掩盖B&W图像的方法。结果将是相同的黑白图像,但是所有高于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 noob。任何人都可以帮我弄清楚在iOS 12中这种方法可能会破坏什么,以及我可以做些什么来解决它?
基于this answer到一个相关的问题,显然我需要在尝试掩码之前将其转换为未压缩的JPG,以删除任何alpha通道。
根据他们的Release Notes,在iOS 12中发生了变化的事情是“各种核心图形调用已经加强了继续使用无效参数。在iOS 12中,这些调用现在可以返回零或提前返回。”
因此iOS 12之前的透明度工作正常,但iOS 12停止工作。以上链接的答案很有用。