1

我有这个代码

CIImage * input_ciimage = [CIImage imageWithCGImage:self.CGImage];
CIImage * output_ciimage =
[[CIFilter filterWithName:@"CILanczosScaleTransform" keysAndValues:
                           kCIInputImageKey, input_ciimage,
                           kCIInputScaleKey, [NSNumber numberWithFloat:0.72], // [NSNumber numberWithFloat: 800.0 / self.size.width],
                           nil] outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef output_cgimage = [context createCGImage:output_ciimage 
    fromRect:[output_ciimage extent]];
UIImage *output_uiimage;
output_uiimage = [UIImage imageWithCGImage:output_cgimage 
    scale:1.0 orientation:self.imageOrientation];
CGImageRelease(output_cgimage);
return output_uiimage;

因此,当 scaleKey 大于某个值时 output_uiimage 是黑色图像。

在我的情况下,如果键 kCIInputScaleKey > @0.52 的值,则结果是黑色图像。当我将图像旋转 90 度时,我得到了相同的结果,但值为 0.72(不是 0.52)。

库有什么问题或我的代码有错误?

如果需要,我有 iPhone 4、iOS 7.1.2、xCode 6.0。

4

2 回答 2

1

苹果是这么说的:

这种情况暴露了 Core Image 中的一个错误。当渲染需要一个尺寸大于 GPU 纹理限制 (4096) 的中间缓冲区并且输入图像符合这些限制时,就会出现该错误。任何对输入图像执行卷积(模糊、lanczos)的过滤器都会发生这种情况,该输入图像的宽度或高度接近 GL 纹理限制。
注意:如果输入图像的维度之一增加到 4097,则渲染成功。

使用 CIAffineTransform(较低质量)替换 CILanczosScaleTransform 或使用 CG 调整图像大小是提供的示例代码的可能解决方法。

于 2014-10-21T06:35:14.763 回答
0

应 Apple 工程师的要求,我已更新错误报告。他们回答:

我们认为问题出在 Core Image Lanczos 过滤器上,该过滤器出现在某些下采样比例因子下。我们希望在未来解决这个问题。

过滤器应该适用于 2 次方(即 1/2、1/4、1/8)的下采样。因此,我们建议将您的下采样限制为这些值,然后在需要时使用 AffineTransform 进一步放大或缩小。

我们现在关闭此错误报告。

于 2015-05-06T05:45:35.657 回答