Как я могу создать конечный CIImage?
CIColorMap
CIFilter
занимает CIImage
в качестве входа. Имеет смысл динамически генерировать это входное изображение, используя другой CIFilter
(такие как CILinearGradient
) но предоставление результата фильтра для фильтра цветовой карты приведет к следующей ошибке, подобной следующей:
[CIColorMap outputImage] требует, чтобы inputGradientImage был конечным
Даже если начальная / конечная точки градиента указаны в качестве входных данных для CILinearGradient
Само изображение фильтра не является конечным. Как я могу сгенерировать конечное CIImage для передачи на мой фильтр?
1 ответ
Решение
Вот пример того, как создать фиксированный размер CIImage
использовать в качестве входных данных для другого 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"];