2017-03-13 2 views
2

Le CIColorMapCIFilter prend une CIImage comme entrée. Il est logique de générer cette image d'entrée dynamiquement en utilisant un autre CIFilter (comme CILinearGradient), mais fournissant le résultat d'un filtre pour le filtre à carte de couleurs se traduira par l'erreur suivante comme suit:Comment créer un CIImage fini?

[CIColorMap outputImage] exige la inputGradientImage soit finie

Même si les points de début/fin du gradient sont spécifiés comme entrées au filtre CILinearGradient l'image elle-même est pas limitée. Comment puis-je générer un CIImage fini pour passer à mon filtre?

Répondre

1

Voici un exemple de la façon de créer une taille fixe CIImage à utiliser comme une entrée à l'autre CIFilter:

CGFloat gradientSize = 100.f;   
CIFilter *gradientFilter = [CIFilter filterWithName:@"CISmoothLinearGradient"]; 
[gradientFilter setValue:[CIVector vectorWithX:0 Y:0] forKey:@"inputPoint0"]; 
[gradientFilter setValue:[CIVector vectorWithX:gradientSize Y:0] forKey:@"inputPoint1"]; 
[gradientFilter setValue:[CIColor colorWithCGColor:[[UIColor cyanColor] CGColor]] forKey:@"inputColor0"]; 
[gradientFilter setValue:[CIColor colorWithCGColor:[[UIColor magentaColor] CGColor]] forKey:@"inputColor1"]; 
CIImage *gradientImage = [[gradientFilter outputImage] imageByCroppingToRect:CGRectMake(0, 0, gradientSize, 1)]; 

// Other filter to receive cropped gradientImage 
CIFilter *gradientMapFilter = [CIFilter filterWithName:@"CIColorMap"]; 
[gradientMapFilter setValue:gradientImage forKey:@"inputGradientImage"];