我正在尝试在我的iPhone应用程序中添加一个功能,允许用户录制屏幕。为此,我使用了一个名为ScreenCaptureView的开源类,通过
编辑: 我需要一种记录屏幕并包括掩码的方法。虽然这个问题特别要求创建一种图像掩码的假象,但我愿意采取任何其他修改来成功记录屏幕。
应用描述: 在应用中,我拍照并通过动画化下巴区域的位置来创造一个移动嘴巴的效果,如下所示。
我会将下巴层通过路径动画进行动画化。
如前所述,
编辑:我正在将裁剪的下巴转换成UIImage,然后将该新图像设置为图层内容,而不是直接对图层进行遮罩处理。但是,裁剪区域与指定的路径相反。
renderInContext:
方法编译主视图的一系列屏幕截图。然而,这种方法忽略了关键的掩码CALayer,这对我的应用程序非常重要。编辑: 我需要一种记录屏幕并包括掩码的方法。虽然这个问题特别要求创建一种图像掩码的假象,但我愿意采取任何其他修改来成功记录屏幕。
应用描述: 在应用中,我拍照并通过动画化下巴区域的位置来创造一个移动嘴巴的效果,如下所示。
目前,我将整个脸作为一个CALayer,下巴区域作为一个单独的CALayer。为了制作下巴层,我使用CGPath从完整的脸部遮罩下巴区域。(该路径是不规则的形状,必须是动态的)。
- (CALayer *)getChinLayerFromPic:(UIImage *)pic frame:(CGRect)frame {
CGMutablePathRef mPath = CGPathCreateMutable();
CGPathMoveToPoint(mPath, NULL, p0.x, p0.y);
CGPoint midpt = CGPointMake( (p2.x + p0.x)/2, (p2.y+ p0.y)/2);
CGPoint c1 = CGPointMake(2*v1.x - midpt.x, 2*v1.y - midpt.y); //control points
CGPoint c2 = CGPointMake(2*v2.x - midpt.x, 2*v2.y - midpt.y);
CGPathAddQuadCurveToPoint(mPath, NULL, c1.x, c1.y, p2.x, p2.y);
CGPathAddQuadCurveToPoint(mPath, NULL, c2.x, c2.y, p0.x, p0.y);
CALayer *chin = [CALayer layer];
CAShapeLayer *chinMask = [CAShapeLayer layer];
chin.frame = frame;
chin.contents = (id)[pic CGImageWithProperOrientation];
chinMask.path = mPath;
chin.mask = chinMask;
CGPathRelease(mPath);
return chin;
}
我会将下巴层通过路径动画进行动画化。
如前所述,
renderInContext:
方法忽略掩码,并返回整个脸部的图像,而不仅仅是下巴。是否有任何方法可以创造一种下巴遮罩的错觉?如果可能的话,我想使用CALayers,因为它对于动画最方便。然而,我也愿意接受任何想法,包括其他捕捉视频的方法。谢谢。编辑:我正在将裁剪的下巴转换成UIImage,然后将该新图像设置为图层内容,而不是直接对图层进行遮罩处理。但是,裁剪区域与指定的路径相反。
CALayer *chin = [CALayer layer];
chin.frame = frame;
CGImageRef imageRef = [pic CGImage];
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
int targetWidth = frame.size.width;
int targetHeight = frame.size.height;
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGContextRef bitmap = CGBitmapContextCreate(NULL, targetWidth, targetHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
CGContextAddPath(bitmap, mPath);
CGContextClip(bitmap);
CGContextDrawImage(bitmap, CGRectMake(0, 0, targetWidth, targetHeight), imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
UIImage *chinPic = [UIImage imageWithCGImage:ref];
chin.contents = (id)[chinPic CGImageWithProperOrientation];