Pergunta

meu dispositivo iOS não realiza nenhum processo com CITemperatureAndTint e CIToneCurve

mas, no caso do CISepiaTone está funcionando direito !!

outputImage = [CIFilter filterWithName:@"CIToneCurve" keysAndValues:@"inputImage", image, @"inputPoint0", [CIVector vectorWithX:0 Y:0], @"inputPoint1", [CIVector vectorWithX:0.25 Y:0.25], @"inputPoint2", [CIVector vectorWithX:0.5 Y:0.5], @"inputPoint3", [CIVector vectorWithX:0.75 Y:0.75], @"inputPoint4", [CIVector vectorWithX:1 Y:1], nil].outputImage;

Existe algum problema com isso ??

Foi útil?

Solução

Use este código: Funciona

- (UIImage*)applyToneCurve:(NSArray*)pointArray {

    if ([pointArray count] < 2) {
        return self;
    }

    CGPoint first = [[pointArray objectAtIndex:0] CGPointValue];

    first.x /= 255.0;
    first.y /= 255.0;

    CGPoint firstPoint = first;

    CGPoint last = [[pointArray lastObject] CGPointValue];

    last.x /= 255.0;
    last.y /= 255.0;

    CGPoint fifthPoint = last;

    CGPoint secondPoint = CGPointMake(0.25, 0.25);
    CGPoint thirdPoint  = CGPointMake(0.50, 0.50);
    CGPoint fourthPoint = CGPointMake(0.75, 0.75);

    for (int i = 1; i < [pointArray count] - 1; i++) {

        CGPoint point = [[pointArray objectAtIndex:i] CGPointValue];

        point.x /= 255.0;
        point.y /= 255.0;

        if (i == 1) {   
            secondPoint = point;
        }
        else if (i == 2) {
            thirdPoint = point;
        }
        else if (i == 3)
            fourthPoint = point;

    }

    CIImage *inputImage = [CIImage imageWithCGImage:self.CGImage];

    CIFilter *toneCurveFilter = [CIFilter filterWithName:@"CIToneCurve"];
    [toneCurveFilter setDefaults];
    [toneCurveFilter setValue:inputImage forKey:kCIInputImageKey];

    [toneCurveFilter setValue:[CIVector vectorWithX:firstPoint.x  Y:firstPoint.y] forKey:@"inputPoint0"];

    [toneCurveFilter setValue:[CIVector vectorWithX:secondPoint.x  Y:secondPoint.y] forKey:@"inputPoint1"];

    [toneCurveFilter setValue:[CIVector vectorWithX:thirdPoint.x Y:thirdPoint.y] forKey:@"inputPoint2"]; 

    [toneCurveFilter setValue:[CIVector vectorWithX:fourthPoint.x Y:fourthPoint.y] forKey:@"inputPoint3"]; 

    [toneCurveFilter setValue:[CIVector vectorWithX:fifthPoint.x Y:fifthPoint.y] forKey:@"inputPoint4"];

    CIImage *outputImage = [toneCurveFilter outputImage];

    CGImageRef ref = [[CIContext contextWithOptions:nil] createCGImage:outputImage fromRect:outputImage.extent];

    UIImage *result = [UIImage imageWithCGImage:ref];

    if (ref) {

        CGImageRelease(ref);
    }

    return result;    
}

PointArray contém 5 pontos NSValue da curva do início ao fim.

Outras dicas

Parece correto.Você tentou inicializar com setDefaults primeiro?

Uma curva de tom normal é uma linha reta de (0,0) a (1,1), que é a linha que seus valores de entrada fazem e é a linha definida por 'setDefaults'.

Curva de tom normal:

Curva de tom padrão  insira a descrição da imagem aqui

Se você alterar seus "pontos de entrada" para fazer uma curva diferente, verá o filtro sendo aplicado.Para uma exposição negativa, tente:

inputPoint0 = (0,1)
inputPoint1 = (0.25,0.75)
inputPoint2 = (0.5,0.5)
inputPoint3 = (0.75,0.25)
inputPoint4 = (1,0)

Ou para uma linha atípica:

Curva de tom atípico

Imagem filtrada

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top