Oui. Vous avez au moins deux options, CIPhotoEffectMono ou un petit CIColorKernel personnalisé.
CIPhotoEffectMono:
func createMonoImage(image:UIImage) -> UIImage {
let filter = CIFilter(name: "CIPhotoEffectMono")
filter!.setValue(CIImage(image: image), forKey: "inputImage")
let outputImage = filter!.outputImage
let cgimg = ciCtx.createCGImage(outputImage!, from: (outputImage?.extent)!)
return UIImage(cgImage: cgimg!)
}
Remarque, je vous écris rapidement, vous devrez peut-être resserrer les choses pour les retours nul.
CIColorKernel:
Le FadeToBW GLSL (0,0 facteur couleur, facteur 1.0 est pas de couleur):
kernel vec4 fadeToBW(__sample s, float factor) {
vec3 lum = vec3(0.299,0.587,0.114);
vec3 bw = vec3(dot(s.rgb,lum));
vec3 pixel = s.rgb + (bw - s.rgb) * factor;
return vec4(pixel,s.a);
}
Le code ci-dessous ouvre cela comme un fichier appelé FadeToBW.cikernel. Vous pouvez également l'afficher en tant que chaîne directement dans l'appel openKernelFile
.
Le code Swift:
func createMonoImage(image:UIImage, inputColorFade:NSNumber) -> UIImage {
let ciKernel = CIColorKernel(string: openKernelFile("FadeToBW"))
let extent = image.extent
let arguments = [image, inputColorFade]
let outputImage = ciKernel.applyWithExtent(extent, arguments: arguments)
let cgimg = ciCtx.createCGImage(outputImage!, from: (outputImage?.extent)!)
return UIImage(cgImage: cgimg!)
}
Encore une fois, ajoutez quelques gardes, etc.
(. Pardonnez-moi j'ai posté ce commentaire comme une réponse Oops..) Oui. Recherchez CIPhotoEffectMono (https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPhotoEffectMono). J'ai également écrit un CIColorKernel personnalisé (code GLSL) qui "s'estompe" en noir et blanc. Je posterai les deux comme une réponse dans quelques minutes. – dfd