2011-08-19 90 views

回答

0

我决定用下面的代码的问题:

layerLeft=[[QTCaptureLayer alloc]initWithSession:sessionLeft]; 
layerRight=[[QTCaptureLayer alloc]initWithSession:sessionRight]; 
[anaglyphView setWantsLayer:YES]; 
CALayer *layer = [CALayer layer]; 
CALayer *containerLeft = [CALayer layer]; 
CALayer *containerRight = [CALayer layer]; 
[anaglyphView setLayer:layer]; 

layer.backgroundColor = CGColorCreateGenericRGB(0,0,0,1); 
layer.borderColor=CGColorCreateGenericRGB(1,1,1,1); 
layer.borderWidth=4.0; 
layer.frame = NSRectToCGRect(NSMakeRect(0, 0, 1000, 1000)); 

[anaglyphView.layer addSublayer:containerLeft]; 
[anaglyphView.layer addSublayer:containerRight]; 
[containerLeft addSublayer:layerLeft]; 
[containerRight addSublayer:layerRight]; 

containerLeft.frame=NSRectToCGRect(NSMakeRect(50, 50, 600, 400)); 
containerRight.frame=NSRectToCGRect(NSMakeRect(50, 50, 600, 400)); 
layerLeft.frame = NSRectToCGRect(NSMakeRect(0, 0, 600, 400)); 
layerRight.frame=NSRectToCGRect(NSMakeRect(0, 0, 600, 400)); 

rightFilter = [CIFilter filterWithName:@"CIColorMatrix"]; 
leftFilter = [CIFilter filterWithName:@"CIColorMatrix"]; 
CIFilter *compositeFilter = [CIFilter filterWithName:@"CIDifferenceBlendMode"]; 


CGFloat zero[4] = {0.0f, 0.0f, 0.0f, 0.0f}; 
CGFloat r[4] = {1, 0.0f, 0.0f, 0.0f}; 
CGFloat g[4] = {0.0f, 1, 0.0f, 0.0f}; 
CGFloat b[4] = {0.0f, 0.0f, 1, 0.0f}; 
CGFloat a[4] = {0.0f, 0.0f, 0.0f, 1}; 
[rightFilter setValue:nil forKey:@"inputImage"]; 
[rightFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputRVector"]; 
[rightFilter setValue:[CIVector vectorWithValues:g count:4] forKey:@"inputGVector"]; 
[rightFilter setValue:[CIVector vectorWithValues:b count:4] forKey:@"inputBVector"]; 
[rightFilter setValue:[CIVector vectorWithValues:a count:4] forKey:@"inputAVector"]; 
[rightFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputBiasVector"]; 

[leftFilter setValue:nil forKey:@"inputImage"]; 
[leftFilter setValue:[CIVector vectorWithValues:r count:4] forKey:@"inputRVector"]; 
[leftFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputGVector"]; 
[leftFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputBVector"]; 
[leftFilter setValue:[CIVector vectorWithValues:a count:4] forKey:@"inputAVector"]; 
[leftFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputBiasVector"]; 

layerRight.compositingFilter =rightFilter; 
layerLeft.compositingFilter =leftFilter; 
containerRight.compositingFilter=compositeFilter; 

凡anaglyphView是的NSView和layerLeft和layerRight两个QTCapureLayer。 我为每个通道(左/右)创建了2个图层,一个用于滤色,另一个用于复合滤波。我不知道CIDifferenceBlendMode复合滤镜是否是制作浮雕的最佳选择,但它似乎起作用。