Как реализовать представление производительности в режиме реального времени для основного фильтра изображений
Я хотел бы реализовать представление производительности в режиме реального времени для отображения вывода фильтра ядра изображения. Сформируйте документацию Apple. Похоже, я должен использовать контекст на основе графического процессора для рисования.
Есть какой-то термин, который я запутал. EAGLContext
, CIContext
, GLKView
, Что это за вещи? Кроме того, я должен использовать EAGLContext
создавать CGImage
от CIImage
и установите его UIImageView
или используя GLKView
, В чем разница между этими двумя подходами?
1 ответ
Вы можете сохранить свое изображение на графическом процессоре, избегая UIImageView
и используя представление OpenGL, GLKView
, Чтобы это работало с CoreImage, вам нужно создать CIContext
с контекстом EAGL:
let eaglContext = EAGLContext(API: .OpenGLES2)
lazy var ciContext: CIContext =
{
[unowned self] in
return CIContext(EAGLContext: self.eaglContext,
options: [kCIContextWorkingColorSpace: NSNull()])
}()
Контекст вашего GLKView
должно быть таким же eaglContext
ему также нужен делегат, соответствующий GLKViewDelegate
,
Чтобы отобразить изображение, отключите отображение с помощью setNeedsDisplay()
, Это позвонит glkView(:drawInRect:)
на делегате, и именно здесь вы используете контекст основного изображения, чтобы нарисовать изображение в GLKView
:
ciContext.drawImage(image,
inRect: targetRect,
fromRect: image.extent)
куда image
это CIImage
для отображения.
Если все это звучит как слишком много усилий, я сделал всю работу за вас, посмотрите мой репозиторий CoreImageHelpers.
Саймон