Ich erstelle eine App, die Echtzeit-Anwendung von Filtern für Bilder erfordert. Konvertieren der in eine CIImage
, und die Anwendung der Filter sind beide extrem schnelle Operationen, aber es dauert zu lange, um die erstellten CIImage
zurück zu einem CGImageRef
zu konvertieren und das Bild anzuzeigen (1/5 einer Sekunde, die tatsächlich eine Menge ist, wenn Sie bearbeiten muss in Echtzeit sein).Zeichnen eines CImage ist zu langsam
Das Bild ist etwa 2500 von 2500 Pixel groß, was das Problem
Derzeit höchstwahrscheinlich Teil ist, bin ich
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)
I EAGLContext.drawImage()
context.drawImage(image, inRect: destinationRect, fromRect: image.extent)
in Verwendung haben gesucht verwenden
Dennoch kann ich keine solide Dokumentation darüber finden, wie genau das gemacht wird, oder ob es schneller wäre
Gibt es eine schnellere Möglichkeit, eine CIImage
auf dem Bildschirm anzuzeigen (entweder in einer UIImageView
oder direkt auf einer CALayer
)? Ich möchte vermeiden, die Bildqualität zu sehr zu verringern, weil dies für den Benutzer wahrnehmbar ist.
Sie didSet auf Bildeigenschaft verwenden: 'var Bild: CIImage? { didset { self.setNeedsDisplay() } } ' Dann wird die ganze setRenderImage Methode obsolet. –
Sie müssen den Kontext in init? (Coder :) (wie in init (frame)) setzen, damit dies vom Storyboard funktioniert. –