Если вы знаете, как код CIColorKernel, вы будете иметь то, что вам нужно ,
В Core Image имеется несколько фильтров размытия, в которых используется GPU, что даст вам необходимую производительность.
CIAreaAverage даст вам средний цвет для указанной прямоугольной области.
Core Image Filters
Вот о простом CIColorKernel вы можете писать.Она меняет местами красный и зеленый значение для каждого пикселя изображения (обратите внимание на «grba» вместо «RGBA»):
kernel vec4 swapRedAndGreenAmount(__sample s) {
return s.grba;
}
Чтобы поместить это в CIColorKernel, просто использовать эту строку кода:
let swapKernel = CIKernel(string:
"kernel vec4 swapRedAndGreenAmount(__sample s) {" +
"return s.grba;" +
"}"
@ tww003 имеет хороший код для преобразования слоя вида в UIImage. Предполагая, что вы называете myUiImage изображения, чтобы выполнить эту swapKernel, вы можете:
let myInputCi = CIImage(image: myUiImage)
let myOutputCi = swapKernel.apply(withExtent: myInputCi, arguments: myInputCi)
Let myNewImage = UIImage(ciImage: myOutputCi)
Вот об этом. Вы можете многое сделать (включая использование CoreGraphics и т. Д.), Но это хороший старт.
Последнее замечание, вы можете связать отдельные фильтры (включая рукописный цвет, warp и общие ядра). Если вы хотите, вы можете связать свой средний цвет по основному виду с размытием и сделать любую инверсию, которую вы хотите, в качестве одного фильтра/эффекта.
проверить этот проект https://github.com/freshking/BKFilterView – Joe
эта библиотека настолько медленная :( – DeyaEldeen
Прочитайте код в библиотеках, которые уже выполняют это, и используйте этот код, чтобы получить представление о том, как создавать свои собственные фильтр. – user3353890