我正在創建一個應用程序,需要在圖像上實時應用濾鏡。將UIImage
轉換爲CIImage
,並且應用這些過濾器都是非常快的操作,但是將創建的CIImage
轉換回CGImageRef
並顯示圖像需要很長的時間(1/5秒,實際上如果編輯它實際上很多需要實時)。繪製CIImage太慢
的圖像是2500由2500像素的大,這是問題的最有可能的一部分
目前,我使用
let image: CIImage //CIImage with applied filters
let eagl = EAGLContext(API: EAGLRenderingAPI.OpenGLES2)
let context = CIContext(EAGLContext: eagl, options: [kCIContextWorkingColorSpace : NSNull()])
//this line takes too long for real-time processing
let cg: CGImage = context.createCGImage(image, fromRect: image.extent)
我已經研究過使用EAGLContext.drawImage()
context.drawImage(image, inRect: destinationRect, fromRect: image.extent)
但是,我無法找到任何有關如何完成這項工作的可靠文件,或者它是否會更快更好
有沒有更快的方法在屏幕上顯示CIImage
(在UIImageView
中,或直接在CALayer
上)?我想避免太多降低圖像質量,因爲這對用戶來說可能是顯而易見的。
你可以在圖像屬性中使用didSet: 'VAR圖像:CIImage? { didSet {self.setNeedsDisplay() } }' 然後整個setRenderImage方法變得過時。 –
您必須在init?(coder :)中設置上下文(就像您在init(frame)中所做的那樣),以便從故事板開始工作。 –