我有这段代码
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。
答案 0 :(得分:1)
这就是Apple所说的:
此方案暴露了Core Image中的错误。当渲染需要具有大于GPU纹理限制(4096)的维度的中间缓冲区并且输入图像符合这些限制时,会发生错误。任何在宽度或高度接近GL纹理限制的输入图像上执行卷积(模糊,lanczos)的滤镜都会发生这种情况。
注意:如果输入图像的某个尺寸增加到4097,则渲染成功。使用CIAffineTransform替换CILanczosScaleTransform(较低质量)或使用CG调整图像大小可能是所提供示例代码的变通方法。
答案 1 :(得分:0)
我在Apple工程师的要求下更新了Bug报告。他们回答:
我们认为问题在于Core Image Lanczos过滤器 在某些下采样比例因子下发生。我们希望解决这个问题 在将来。
滤波器应该适用于功率为2的下采样(即 1 / 2,1 / 4,1 / 8)。因此,我们建议将您的缩减示例限制为 这些值然后使用AffineTransform进行放大或缩小 如果需要,可以进一步。
我们现在正在关闭此错误报告。