Ios 城市温度、色调和城市曲线不起作用
我的iOS设备不会对Citemperature、Tint和CIToneCurve进行任何处理 但是,万一发生这种情况,皮亚通的做法是正确的Ios 城市温度、色调和城市曲线不起作用,ios,ios5,core-image,Ios,Ios5,Core Image,我的iOS设备不会对Citemperature、Tint和CIToneCurve进行任何处理 但是,万一发生这种情况,皮亚通的做法是正确的 outputImage = [CIFilter filterWithName:@"CIToneCurve" keysAndValues:@"inputImage", image, @"inputPoint0", [CIVector vectorWithX:0 Y:0], @"inputPoint1", [CIVector vectorWithX:0.25 Y
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;
这有什么问题吗???看起来正确。您是否尝试过先使用setDefaults进行初始化?使用此代码:它可以工作
- (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;
}
-(UIImage*)applyToneCurve:(NSArray*)点数组{
如果([pointArray计数]<2){
回归自我;
}
CGPoint first=[[pointArray objectAtIndex:0]CGPointValue];
第一.x/=255.0;
第一,y/=255.0;
CGPoint firstPoint=第一;
CGPoint last=[[pointArray lastObject]CGPointValue];
last.x/=255.0;
last.y/=255.0;
CGPoint fifthPoint=最后一个;
CGPoint secondPoint=CGPointMake(0.25,0.25);
CGPoint thirdPoint=CGPointMake(0.50,0.50);
CGPoint-fourthPoint=CGPointMake(0.75,0.75);
对于(int i=1;i<[点阵列计数]-1;i++){
CGPoint point=[[pointArray objectAtIndex:i]CGPointValue];
点x/=255.0;
点y/=255.0;
如果(i==1){
第二点=点;
}
else如果(i==2){
第三点=点;
}
else如果(i==3)
第四点=点;
}
CIImage*inputImage=[CIImage-imageWithCGImage:self.CGImage];
CIFilter*toneCurveFilter=[CIFilter过滤器名称:@“CIToneCurve”];
[toneCurveFilter设置默认值];
[toneCurveFilter设置值:InputImageForkey:KCIIInputImageKey];
[toneCurveFilter设置值:[CIVector vectorWithX:firstPoint.XY:firstPoint.Y]forKey:@“inputPoint0”];
[toneCurveFilter设置值:[CIVector vectorWithX:secondPoint.XY:secondPoint.Y]分叉:@“inputPoint1”];
[toneCurveFilter设置值:[x:thirdPoint.XY:thirdPoint.Y]forKey:@“inputPoint2”];
[toneCurveFilter设置值:[x:fourthPoint.XY:fourthPoint.Y]forKey:@“inputPoint3”];
[toneCurveFilter设置值:[x:fifthPoint.XY:fifthPoint.Y]forKey:@“inputPoint4”];
CIImage*outputImage=[toneCurveFilter outputImage];
CGImageRef ref=[[CIContext contextWithOptions:nil]创建CGImage:outputImage fromRect:outputImage.extent];
UIImage*结果=[UIImage imageWithCGImage:ref];
如果(参考){
CGImageRelease(ref);
}
返回结果;
}
PointArray从开始到结束包含5个NSValue曲线点。正常音调曲线是从(0,0)到(1,1)的直线,这是您输入值所形成的直线,是由“设置默认值”设置的直线 正常音调曲线: 如果您更改“inputPoints”以生成不同的曲线,您将看到应用的过滤器。对于负面曝光,请尝试:
inputPoint0 = (0,1)
inputPoint1 = (0.25,0.75)
inputPoint2 = (0.5,0.5)
inputPoint3 = (0.75,0.25)
inputPoint4 = (1,0)
或对于非典型线: