2016-11-22 3 views
2

В моем приложении для iPhone я всегда использовал следующую функцию для изображения horizontally mirror.iOS 10: функция ROI от CIKernel не разрешает разбиение

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

с прошивкой 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 изображение), и размер идентичен.

ответ

1

Ничего.

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

-(UIImage*)mirrorImage:(UIImage*)img 
{ 
    UIImage* flippedImage = [UIImage imageWithCGImage:img.CGImage 
               scale:img.scale 
              orientation:UIImageOrientationUpMirrored]; 
    return flippedImage; 
} 
3

Я зафиксировал его путем преобразования 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) 
Смежные вопросы