Utilisation d'un CIImage de CIColor dans un CIFilter: obtention d'une image vide

J'essaye de créer un CIFilter avec le mode de mélange (comme superposer ou multiplier). Code pertinent:

// Let's try a filter here // Get the data NSData *imageData = UIImageJPEGRepresentation(image, 0.85); // Create a CI Image CIImage *beginImage = [CIImage imageWithData:imageData]; CIImage *overlay = [CIImage imageWithColor:[CIColor colorWithRed:0.7 green:0.75 blue:0.9 alpha:0.75]]; // Create a context CIContext *context = [CIContext contextWithOptions:nil]; // Create filter CIFilter *filter = [CIFilter filterWithName:@"CIOverlayBlendMode" keysAndValues:@"inputImage", beginImage, @"inputBackgroundImage", overlay, nil]; 

D'autres filters fonctionnent bien (comme le ton sépia), mais avec un filter qui nécessite une key "inputBackgroundImage", j'obtiens un résultat vide / vide … donc quelque chose semble mal fonctionner avec mon image de fond.

Comment utiliser un filter de mode de fusion en plaçant une couleur unie sur une image?

C'est correct dans le code du démarreur de sujet, un seul correctif devrait l'être.

 NSData *imageData = UIImageJPEGRepresentation(image, 0.85); // Create a CI Image CIImage *beginImage = [CIImage imageWithData:imageData]; CIImage *overlay = [CIImage imageWithColor:[CIColor colorWithRed:0.7 green:0.75 blue:0.9 alpha:0.75]]; //You should crop the generated image to beginImage size because generated image's size is infinite. I don't know why, but CIOverlayBlendMode isn't tolerant to infinite size overlay = [overlay imageByCroppingToRect:CGRectMake(beginImage.extent.origin.x, beginImage.extent.origin.y, beginImage.extent.size.width, beginImage.extent.size.height)]; // Create a context CIContext *context = [CIContext contextWithOptions:nil]; // Create filter CIFilter *filter = [CIFilter filterWithName:@"CIOverlayBlendMode" keysAndValues:@"inputImage", beginImage, @"inputBackgroundImage", overlay, nil]; 

Cela marche:

 //assume beginImage is CIImage you want to tint CIImage* outputImage = nil; //create some blue CIFilter* blueGenerator = [CIFilter filterWithName:@"CIConstantColorGenerator"]; CIColor* blue = [CIColor colorWithSsortingng:@"0.1 0.5 0.8 1.0"]; [blueGenerator setValue:blue forKey:@"inputColor"]; CIImage* blueImage = [blueGenerator valueForKey:@"outputImage"]; //apply a multiply filter CIFilter* filterm = [CIFilter filterWithName:@"CIMultiplyCompositing"]; [filterm setValue:blueImage forKey:@"inputImage"]; [filterm setValue:beginImage forKey:@"inputBackgroundImage"]; outputImage = [filterm valueForKey:@"outputImage"];