gpt4 book ai didi

ios - 在不使用图像 mask 的情况下裁剪图像?

转载 作者:可可西里 更新时间:2023-11-01 06:15:52 24 4
gpt4 key购买 nike

我正在尝试在我的 iPhone 应用程序中添加一项允许用户录制屏幕的功能。为此,我使用了一个名为 ScreenCaptureView 的开源类通过 renderInContext: 方法编译主视图的一系列屏幕截图。但是,此方法会忽略屏蔽的 CALayers,这是我的应用程序的关键。

编辑:我需要一种录制屏幕的方法,以便包含 mask 。虽然这个问题特别要求一种方法来创建图像蒙版的幻觉,但我愿意接受任何其他修改以成功录制屏幕。

应用描述

在应用程序中,我拍了一张照片,并通过为下巴区域的位置设置动画来创建移动嘴巴的效果,如下所示。

enter image description here enter image description here

目前,我将整个面部作为一个 CALayer,将下巴区域作为一个单独的 CALayer。为了制作下巴层,我使用 CGPath 从整个面部遮盖了下巴区域。 (这条路径是不规则形状,必须是动态的)。

enter image description here

- (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: 方法会忽略 mask ,并返回整个面部的图像,而不仅仅是下巴。有什么办法可以制造遮住下巴的错觉吗?如果可能的话,我想使用 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];

最佳答案

为什么不将下巴的 CALayer 绘制到一个单独的 CGImage 中并用它制作一个新的 UIImage?然后,您可以将此 CGImage 添加到单独的 UIImageView,例如,您可以使用 PanGestureRecognizer 移动它?

关于ios - 在不使用图像 mask 的情况下裁剪图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com