gpt4 book ai didi

objective-c - applyBlurWithRadius 适用于 iPhone 6,而不是 6+ (UIImage+ImageEffects)

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:09 25 4
gpt4 key购买 nike

我使用的是 Apple 的 UIImage+ImageEffects来自 WWDC(2013 年?)的类别

这种方法在 iPhone 6 上工作得很好,但在 iPhone 6 Plus 上创建了一个非常奇怪的不模糊、过饱和的图像:

[self applyBlurWithRadius:60 tintColor:[UIColor colorWithWhite:1.0 alpha:0.3] saturationDeltaFactor:2.4 maskImage:nil];

iPhone 6(正确):

enter image description here

iPhone 6 Plus(奇怪):

enter image description here

知道发生了什么吗?

更新:我通过反复试验确定将 blurRadius 设置为小于或等于 50 的任何值都显示正常,因此它与半径有关。我仍然想知道究竟是什么导致它在大屏幕上出现问题。

最佳答案

我知道这个问题已经过时了,而且 OP 已经开始了,但我想解释一下为什么每部手机上的问题都不一样......为了后代。

iPhone6 和 iPhone6+ 的屏幕分辨率不同。主要是iPhone6的比例为2.0,而iPhone6+的比例为3.0。

为什么这很重要?

在源文件 UIImage+ImageEffects.mapplyBlurWithRadius 的源代码中,您会发现这些行:

CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale];
uint32_t radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5);
if (radius % 2 != 1) {
radius += 1; // force radius to be odd so that the three box-blur methodology works.
}

您可以看到 inputRadius 会根据屏幕的比例而有所不同。因此,在 iPhone6 上,该值将是 60*2(radius 的最终结果将是:227),而在 iPhone6+ 上,该值将是 60 *3(radius 的最终结果将为 339)。这显然会产生不同的结果,因为它们是不同的值。

至于为什么会有色差?我很确定 radius 不应超过 255,否则可能会出现未定义的结果(可能是整数溢出,导致颜色分量回绕到零)。由于 iPhone6+ 的屏幕比例值将其推到该值以上,您会看到奇怪的结果,但在 iPhone6 上不会,因为它低于该阈值。

通过将 blurRadius 参数的值设为 90,您应该能够在 iPhone6 上看到同样的奇怪现象。

旁注:无论如何,参数 blurRadius 的值都不应超过 30 —— 超出该点后结果不会有太大差异。

希望对你有帮助。

关于objective-c - applyBlurWithRadius 适用于 iPhone 6,而不是 6+ (UIImage+ImageEffects),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26002970/

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