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;
}