Поскольку iOS 12 CIColorKernel (источник: «строка ядра») устарела. Кто-нибудь из вас знает, что является заменой Apple для этого?
Я ищу собственный CIFilter в Swift. Может быть, есть библиотека с открытым исходным кодом?
Поскольку iOS 12 CIColorKernel (источник: «строка ядра») устарела. Кто-нибудь из вас знает, что является заменой Apple для этого?
Я ищу собственный CIFilter в Swift. Может быть, есть библиотека с открытым исходным кодом?
Еще на WWDC 2017 было объявлено, что пользовательские фильтры также могут быть написаны с помощью языка Metal Shading — https://developer.apple.com/documentation/coreimage/writing_custom_kernels
Так что теперь, по-видимому, они полностью избавляются от Core Image Kernel Language.
Вот краткое введение в написание CIColorKernel с помощью Metal — https://medium.com/@shu223/core-image-filters-with-metal-71afd6377f4
Писать ядра с помощью Metal на самом деле проще, единственная загвоздка в том, что вам нужно указать 2 флага компилятора в проекте (см. статью выше).
.air
. Очевидно, что его формат отличается от .metallib
. Если у вас есть фильтр, написанный на языке Core Image Kernel, вам нужно будет переписать его на языке Metal Shading Language с нуля.
- person Maxim Volgin; 28.10.2018
Я пытался следовать этим сообщениям в блоге и документам Apple, но эта интеграция между CoreImage и Metal довольно запутана. После долгих поисков я создал фактически работающий пример iOS, демонстрирующий, как написать ядро Metal. функцию оттенков серого и заставьте ее обрабатывать конвейер CoreImage.
Вы можете использовать его следующим образом:
let url = Bundle.main.url(forResource: "default", withExtension: "metallib")!
let data = try! Data(contentsOf: url)
let kernel = try! CIKernel(functionName: "monochrome", fromMetalLibraryData: data)
let sampler = CISampler(image: inputImage)
let outputImage = kernel.apply(extent: image.extent, roiCallback: { _, rect in rect }, arguments: [sampler])
Согласно Apple: "Вам необходимо установить эти флаги, чтобы использовать MSL в качестве языка шейдеров для CIKernel. Вы должны указать некоторые параметры в Xcode на вкладке «Параметры сборки» цели вашего проекта. Первый параметр, который вам нужно указать, — это флаг -fcikernel в параметре «Другие флаги металлического компилятора». Второй — добавить пользовательская настройка с ключом MTLLINKER_FLAGS со значением -cikernel: