Мой код преобразует цветной NSImage в оттенки серого. Затем он преобразует оттенки серого в чисто черно-белое изображение. Есть ли способ создать фильтр, который может указать, как преобразовать серые пиксели в черный / белый? Например -
1. Если значение пикселя> 100, превратить его в черный.
2. Иначе превратите пиксель в белый.
Какие настройки фильтра я могу использовать для достижения этой цели?
Обновлено с помощью пользовательского фильтра CIKernel:
func applyCustomCIFilter( path: String )->NSImage{
let url = URL(fileURLWithPath: path)
let origImage = CIImage(contentsOf: url)!
// Convert image into grayscale
let grayImage = CIFilter(name: "CIPhotoEffectNoir", parameters: [kCIInputImageKey: origImage])?.outputImage
print("convert into black and white")
// custom filter to convert light gray to white and dark gray to black
let replaceGrayKernel = CIColorKernel( source:
"kernel vec4 replaceGrayWithBlackOrWhite(sampler grayImage) {" +
"if( sample(grayImage, samplerCoord(grayImage)).rgb > 0.7 ){" +
"return vec4(0.0,0.0,0.0,1.0);" +
"}" +
"else" +
"{" +
"return vec4(1.0,1.0,1.0,1.0);" +
"}" +
"}"
)
//Apply custom filter to grayscale image.
//ERROR: blackAndWhiteImage is nil causing runtime failure
let blackAndWhiteImage = replaceGrayKernel?.apply(extent: (grayImage!.extent), arguments: [grayImage as Any])
//Convert CIImage to NSImage
let rep = NSCIImageRep(ciImage: blackAndWhiteImage!)
let nsImage = NSImage(size: rep.size)
nsImage.addRepresentation(rep)
return nsImage;
}