在我的iPhone应用程序中,我一直使用以下函数对图像进行horizontally mirror

-(UIImage*)mirrorImage:(UIImage*)img
{
    CIImage *coreImage = [CIImage imageWithCGImage:img.CGImage];
    coreImage = [coreImage imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)];
    img = [UIImage imageWithCIImage:coreImage scale:img.scale orientation:UIImageOrientationUp];
    return img;
}

在iOS 10.0.1中,此功能仍然可以正常运行,但是当我尝试使用此功能中的UIImage时,会出现以下警告,并且图像似乎不存在。
Failed to render 921600 pixels because a CIKernel's ROI function did not allow tiling.

当我尝试使用UIImage时,此错误实际上出现在“输出”窗口中(此代码的第二行):
UIImage* flippedImage = [self mirrorImage:originalImage];
UIImageView* photo = [[UIImageView alloc] initWithImage:flippedImage];

调用mirrorImage之后,flippedImage变量确实包含一个值,而不是nil,但是当我尝试使用该图像时,收到了该错误消息。

如果我不调用mirrorImage函数,则代码可以正常工作:
UIImageView* photo = [[UIImageView alloc] initWithImage:originalImage];

是否有一些新的iOS 10怪癖会阻止mirrorImage函数正常工作?

只是要添加,在mirrorImage函数中,我尝试在转换前后测试图像的大小(因为错误抱怨必须对图像进行tile),并且大小是相同的。

最佳答案

我通过转换CIImage-> CGImage-> UIImage修复了它

let ciImage: CIImage = "myCIImageFile"

let cgImage: CGImage = {
    let context = CIContext(options: nil)
    return context.createCGImage(ciImage, from: ciImage.extent)!
}()

let uiImage = UIImage(cgImage: cgImage)

10-08 07:46