Swift игровая площадка - невозможно преобразовать отфильтрованный UIImage в CGImage

На игровой площадке Swift я загружаю JPEG, конвертирую его в UIImage и фильтрую в монохромный. Затем я конвертирую полученное отфильтрованное изображение в UIImage.

Входные и отфильтрованные изображения отображаются правильно.

Затем я конвертирую оба изображения в тип CGImage. Это работает для входного изображения, но отфильтрованное изображение после преобразования возвращает ноль:

// Get an input image
let imageFilename = "yosemite.jpg"
let inputImage = UIImage(named: imageFilename )
let inputCIImage = CIImage(image:inputImage!)

// Filter the input image - make it monochrome
let filter = CIFilter(name: "CIPhotoEffectMono")
filter!.setDefaults()
filter!.setValue(inputCIImage, forKey: kCIInputImageKey)
let CIout = filter!.outputImage
let filteredImage = UIImage(CIImage: CIout!)        

// Convert the input image to a CGImage
let inputCGImageRef = inputImage!.CGImage           // Result: <CGImage 0x7fdd095023d0>
// THE LINE ABOVE WORKS

// Try to convert the filtered image to a CGImage
let filteredCGImageRef = filteredImage.CGImage      // Result: nil
// THE LINE ABOVE DOES NOT WORK
// Note that the compiler objects to 'filteredImage!.CGImage'

Что случилось?


person Simon Youens    schedule 02.05.2016    source источник
comment
Возможный дубликат? stackoverflow.com/questions/10022534/   -  person Bryan Chen    schedule 02.05.2016
comment
@BryanChen - это та же проблема, но это решение Objective C.   -  person Simon Youens    schedule 03.05.2016
comment
Вот почему я не стал голосовать за ваш вопрос. Но ссылка дает ответ, почему CGImage равен нулю.   -  person Bryan Chen    schedule 04.05.2016


Ответы (1)


UIImage, созданный из CIImage, как вы это сделали, не подкреплен CGImage. Вам нужно явно создать его:

let context = CIContext()
let filteredCGImageRef = context.createCGImage(
    CIout!, 
    fromRect: CIout!.extent)

Если вам нужен UIImage, создайте его из CGImage, обработанного CIContext:

UIImage(CGImage: filteredCGImageRef)

Ваше здоровье,

Саймон

person Simon Gladman    schedule 04.05.2016
comment
Идеально - именно то, что мне нужно. - person Simon Youens; 08.05.2016
comment
У меня была та же проблема, что и у Саймона Юенса из моего CIFiltered UIImage, возвращающего nil при преобразовании его в cgImage с использованием .cgImage, и создание CGImage с использованием этого явного метода CIContext () решило эту проблему и для меня. Большое спасибо! - person Isaac A; 22.02.2020