2013-01-23 13 views
5

Ich möchte eine CoreImage-Filterkette erstellen und die "Intensität" jedes Filters in der Kette steuern können, indem ich seinen individuellen Effekt mit Alpha oder Opazitätseinstellungen zusammenfasse, aber ich sehe keine Möglichkeit, in den Dokumenten mit Alpha oder Opazität zu kombinieren.Xcode: Compositing mit Alpha mit Core-Image

Ich könnte aus Core-Image-Filter-Kette und Composite mit einem Core-Grafik-Kontext ich denke, springen.

Antwort

-1

Ended es so zu tun. Code aus dieser Antwort: https://stackoverflow.com/a/3188761/1408546

UIImage *bottomImage = inputImage; 
UIImage *image = filterOutput; 
CGSize newSize = CGSizeMake(inputImage.size.width, inputImage.size.height); 
UIGraphicsBeginImageContext(newSize); 
[bottomImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)]; 
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeNormal alpha:_opacity]; 
UIImage *blendedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
13

Die CIColorMatrix Filter verwendet werden können, die Alpha-Komponente eines CIImage zu ändern, die Sie dann Composite auf ein Hintergrundbild:

CIImage *overlayImage = … // from file, CGImage etc 
CIImage *backgroundImage = … // likewise 

CGFloat alpha = 0.5; 
CGFloat rgba[4] = {0.0, 0.0, 0.0, alpha}; 
CIFilter *colorMatrix = [CIFilter filterWithName:@"CIColorMatrix"]; 
[colorMatrix setDefaults]; 
[colorMatrix setValue:overlayImage forKey: kCIInputImageKey]; 
[colorMatrix setValue:[CIVector vectorWithValues:rgba count:4] forKey:@"inputAVector"]; 

CIFilter *composite = [CIFilter filterWithName:@"CISourceOverCompositing"]; 
[composite setDefaults]; 
[composite setValue:colorMatrix.outputImage forKey: kCIInputImageKey]; 
[composite setValue:backgroundImage forKey: kCIInputBackgroundImageKey]; 

UIImage *blendedImage = [UIImage imageWithCIImage:composite.outputImage];