Olcay Ertaş
Olcay Ertaş

Reputation: 6228

iOS: CIColorInvert filter is not working on device

This is my code block to invert colors of an image:

import Foundation
import UIKit
import CoreImage

extension UIImage {
    static let defaultImage = UIImage(systemName: "person.circle.fill")!
    func colorInverted() -> UIImage {
        guard let ciImage = CIImage(image: self) else {
            print("UIImage: Failed to get CIImage!")
            return UIImage.defaultImage
        }
        guard let filter = CIFilter(name: "CIColorInvert") else {
            print("UIImage: Failed to get filter!")
            return UIImage.defaultImage
        }
        filter.setValue(ciImage, forKey: kCIInputImageKey)
        guard let image = filter.outputImage else {
            print("UIImage: Failed to get output image!")
            return UIImage.defaultImage
        }
        return UIImage(ciImage: image)
    }
}

This is working fine on simulator:

on simulator

But on real device the result is a full blue image:

on real device

I have searched for a while but could not able to find a solution. Can anyone help?

Note: I am getting images from GitHub API:

https://avatars0.githubusercontent.com/u/1?v=4

Upvotes: 2

Views: 528

Answers (1)

Shima Daryabari
Shima Daryabari

Reputation: 54

use CIContext instead of UIImage(CIImage:)

func applyFilter(){
    let image = CIImage(CGImage: myimage.image?.CGImage)
    let filter = CIFilter(name: "CISepiaTone")
    filter.setDefaults()
    filter.setValue(image, forKey: kCIInputImageKey)

    let context = CIContext(options: nil)
    let imageRef = context.createCGImage(filter.outputImage, fromRect: image.extent())
    myimage.image = UIImage(CGImage: imageRef)
}

Upvotes: 1

Related Questions