2013-01-23 5 views
5

Chciałbym stworzyć łańcuch filtrów CoreImage i móc kontrolować "intensywność" każdego filtru w łańcuchu, komponując jego indywidualny efekt z ustawieniami alfa lub kryciem, ale nie widzę sposobu, aby złożyć w alfa lub krycie w dokumentach.Xcode: komponowanie z alfa przy użyciu obrazu rdzenia

Mogę wyskoczyć z łańcucha filtrów obrazu rdzenia i złożonego z podstawowym kontekstem graficznym, jak sądzę.

Odpowiedz

-1

Skończyłem robić to w ten sposób. Kod z tej odpowiedzi: 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

CIColorMatrix Filtr może być stosowany w celu zmiany składnika alfa o CIImage, który można następnie kompozytowe na tapetę:

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];