Как я могу создать конечный CIImage?

CIColorMap CIFilter принимает CIImage в качестве входных данных. Имеет смысл генерировать это входное изображение динамически, используя другой CIFilter (например, CILinearGradient), но предоставление результата фильтра для фильтра цветовой карты приведет к следующей ошибке, подобной следующей:

[CIColorMap outputImage] требует, чтобы inputGradientImage был конечным

Несмотря на то, что начальная/конечная точки градиента указаны как входные данные для фильтра CILinearGradient, само изображение не является конечным. Как я могу создать конечный CIImage для передачи моему фильтру?


person Warpling    schedule 13.03.2017    source источник


Ответы (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"];
person Warpling    schedule 13.03.2017