gpt4 book ai didi

objective-c - CGImage Masking 在 iOS 12 上停止工作

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:02 34 4
gpt4 key购买 nike

我有一种通过剪切(即透明化)任何高于或低于特定亮度的像素来屏蔽黑白图像的方法。结果将是相同的黑白图像,但亮度高于 70% 或低于 25%(或您选择的任何值)的所有内容都变为透明。

Desired Result

它在 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 中使用此方法可能会破坏什么,以及我可以做些什么来修复它?

最佳答案

基于 this answer对于一个相关的问题,显然我需要在尝试蒙版之前将其转换为未压缩的 JPG,以删除任何 alpha channel 。

根据他们的 Release Notes,iOS 12 中发生的变化是,“各种 Core Graphics 调用已被强化以防止继续使用无效参数。在 iOS 12 中,这些调用现在可能返回 nil 或提前返回。”

因此,在 iOS 12 之前包含的透明度工作正常,但在 iOS 12 中就停止工作了。上面的链接答案效果很好。

关于objective-c - CGImage Masking 在 iOS 12 上停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54845394/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com