2014-02-08 3 views
2

Я пытаюсь отобразить CIImage в определенном месте на IOSurface с использованием [CIContext render:toIOSurface:bounds:colorSpace:], указав в качестве целевого прямоугольника параметр bounds.Render CIImage для конкретного прямоугольника в IOSurface

В соответствии с документацией это должно работать, но CoreImage всегда отображает изображение в нижнем левом углу IOSurface.

Мне кажется, как ошибка в CoreImage.

Я могу преодолеть эту проблему, предоставив изображение промежуточной IOS-поверхности с тем же размером CIImage, а затем скопируйте содержимое поверхности на другую поверхность. Однако я бы хотел избежать распределения и копирования в решении.

Любое предложение?

ответ

2

То, что вы хотите, в настоящее время невозможно с помощью этого API (который является огромным обломком).

Вы можете, однако, обернуть свою поверхность IOS как текстуру (используя CGLTexImageIOSurface2D), а затем использовать контекст CIContextWithCGLContext: ..., а затем, наконец, использовать drawImage: inRect: fromRect: для этого.

Это огромный хак, но он работает (в основном): https://github.com/ccgus/FMMicroPaintPlus/blob/master/CIMicroPaint/FMIOSurfaceAccumulator.m

+0

Это решение очень медленно для визуализации небольших участков изображения по запросу. В основном, поскольку CoreImage может копировать данные с CGDataProvider на графический процессор, и кажется, что его автоматическое кэширование в этом случае не работает. –

Смежные вопросы