objective-c - CGImage Masking 在 iOS 12 上停止工作
问题描述
我有一种方法可以通过剪切(即透明)任何高于或低于某个亮度的像素来屏蔽黑白图像。结果将是相同的黑白图像,但亮度高于 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 中这种方法可能会破坏什么,以及我能做些什么来修复它?
解决方案
推荐阅读
- python-3.x - 用不同的随机均匀变量替换 Pandas DataFrame 中的 NaN 值
- python - Python中类似C的结构数组
- java - 如何获得 Avro 模式验证以支持字段别名?
- java - checkstyle-maven-plugin 3.0.0 弃用参数 sourceDirectory
- python - 为什么使用这个包含“allOf”的模式进行 JSON 验证总是成功的?
- python - Django DLL 加载失败:找不到指定的模块
- xml - Xamarin:如何覆盖所有标签的标签样式类?
- python - 基于数据覆盖字段模式 - Marshmallow
- android - 从 Firebase 检索数据的问题:com.google.firebase.database.DatabaseException:无法将 java.util.ArrayList 类型的值转换为字符串
- javascript - 当不同的属性值发生变化时如何在jquery中添加一个类?