2013-05-31 82 views
2

我想在由AVCapture捕获的视频上显示CALayer。 我能够显示图层,但是应该删除先前的下一帧。如何在AVCapture视频上添加CALayer矩形形状?

我的代码是:

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

for (int i = 0; i < faces.size(); i++) { 
    CGRect faceRect; 
    // Get the Graphics Context   

    faceRect.origin.x = xyPoints.x; 
    faceRect.origin.y = xyPoints.y; 
    faceRect.size.width =50; //faces[i].width; 
    faceRect.size.height =50;// faces[i].height; 

    CALayer *featureLayer=nil;   

    // faceRect = CGRectApplyAffineTransform(faceRect, t); 
    if (!featureLayer) { 
     featureLayer = [[CALayer alloc]init]; 

     featureLayer.borderColor = [[UIColor redColor] CGColor]; 
     featureLayer.borderWidth = 10.0f; 
     [self.view.layer addSublayer:featureLayer]; 

    } 

    featureLayer.frame = faceRect; 

    NSLog(@"frame-x - %f, frame-y - %f, frame-width - %f, frame-height - %f",featureLayer.frame.origin.x,featureLayer.frame.origin.y,featureLayer.frame.size.width,featureLayer.frame.size.height); 
} 

// [featureLayer removeFromSuperlayer]; 
[CATransaction commit]; 

这里面对的是(const std::vector<cv::Rect)face OpenCV的格式。 我需要知道在哪里放置代码[featureLayer removeFromSuperLayer];

注意:“脸”不适用于人脸检测......它只是一个矩形。

回答

1

我已经得到了解决方案... featureLayer是CALayer对象我将此作为标识。像

featureLayer.name = @"earLayer"; 

,每当我发现在帧中的对象我从主视图中的子层像

NSArray *sublayers = [NSArray arrayWithArray:[self.view.layer sublayers]]; 

和计数子层办理登机手续循环象下面这样:

int sublayersCount = [sublayers count]; 
    int currentSublayer = 0; 
for (CALayer *layer in sublayers) { 
     NSString *layerName = [layer name]; 
     if ([layerName isEqualToString:@"earayer"]) 
      [layer setHidden:YES]; 
} 

现在我正在使用Detected对象获取适当的图层。

相关问题