Как реализовать представление производительности в режиме реального времени для основного фильтра изображений

Я хотел бы реализовать представление производительности в режиме реального времени для отображения вывода фильтра ядра изображения. Сформируйте документацию 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.

Саймон

Другие вопросы по тегам