Пример использования фильтра CIGaussianGradient для Core Image - PullRequest
2 голосов
/ 07 ноября 2011

Я ищу пример кода этого фильтра Core Image для iOS. Те фильтры с inputImage в параметре, я могу понять, как реализовать. Но те без параметра inputImage, я не уверен, как это работает.

Вот выдержка из документа Apple:

CIGaussianGradient

Создает градиент, который варьируется от одного цвета к другому с использованием гауссовского распределения. Параметры

inputCenter

A CIVector class whose attribute type is CIAttributeTypePosition and whose display name is Center.

Default value: [150 150] Identity: (null) 

inputColor0

A CIColor class whose display name is Color 1.

inputColor1

A CIColor class whose display name is Color 2.

inputRadius

An NSNumber class whose attribute type is CIAttributeTypeDistance and whose display name is Radius.

Default value: 300.00 Minimum: 0.00 Maximum: 0.00 Slider minimum: 0.00 Slider maximum: 800.00 Identity: 300.00

1 Ответ

3 голосов
/ 17 ноября 2011

Это должно помочь вам начать ... хотя я не уверен, почему в iOS создается градиент пурпурный над белым, а в Quartz Composer - градиент пурпурный над черным. (если вы не использовали Quartz Composer, он включен в инструменты разработчика Apple и отлично подходит для тестирования фильтров Core Image)

Чтобы сделать что-нибудь полезное с этим, я думаю, что вы должны обрезать его потом - иначе это будет иметь бесконечные размеры (согласно Quartz Composer).

// set up the parameters for the filter
CIVector *centerVector = [CIVector vectorWithX:150 Y:150];
CIColor *color0 = [CIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:1.0];
CIColor *color1 = [CIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0];
NSNumber *radius = [NSNumber numberWithFloat:300.0];

// create a CIImage and apply the filter
CIImage *theCIImage = [[CIImage alloc] init];
theCIImage = [CIFilter filterWithName:@"CIGaussianGradient" keysAndValues:@"inputCenter", centerVector, @"inputColor0", color0, @"inputColor1", color1, @"inputRadius", radius, nil].outputImage;

// crop the image using CICrop
CGRect rect = CGRectMake(0.0, 0.0, 600.0, 600.0);
theCIImage = [CIFilter filterWithName:@"CICrop" keysAndValues:kCIInputImageKey, theCIImage, @"inputRectangle", rect, nil].outputImage;
...