iOS 10: функция ROI в CIKernel не позволяла использовать тайлы

В моем приложении для 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 изображение), а размер идентичен.

2 ответа

Я исправил это, преобразовав 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)

Не берите в голову.

Я не знаю что iOS 10 сломался, но мне удалось исправить проблему, заменив мою функцию следующим образом:

-(UIImage*)mirrorImage:(UIImage*)img
{
    UIImage* flippedImage = [UIImage imageWithCGImage:img.CGImage
                                                scale:img.scale
                                          orientation:UIImageOrientationUpMirrored];
    return flippedImage;
}
Другие вопросы по тегам