如何从previewLayer捕获中使用UIBezierPath剪辑UIImage?

时间:2017-04-16 11:40:19

标签: ios objective-c uiimage avfoundation uibezierpath

我将AVFoundation的照片捕捉到AVCaptureVideoPreviewLayer时创建了UIBezierPath。我在屏幕的位置添加了一个UIBezierPath,我希望得到这个UIBezierPath后面的照片区域。

我想得到这样的照片:

我在自定义应用相机中有这个: enter image description here 我希望得到这个: enter image description here

我使用此代码,但我无法得到这个,我总是得到像原始大小的uiimage,左上角的区域非常像这样: enter image description here

如何保持原始图像的比例并且仅剪切由路径确定的区域?

这是我的代码,出了什么问题?

AVCaptureConnection *connection = [stillImageOutput connectionWithMediaType:AVMediaTypeVideo];

[stillImageOutput captureStillImageAsynchronouslyFromConnection:connection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {

NSData *imageData=[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image=[UIImage imageWithData:imageData];

UIBezierPath* path = [UIBezierPath new];
[path moveToPoint:[points[0] CGPointValue]];
for (NSInteger i = 1; i < points.count; i++)
    [path addLineToPoint:[points[i] CGPointValue]];

UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale);

[path addClip];

[image drawAtPoint:CGPointZero];

UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();

UIImageWriteToSavedPhotosAlbum(maskedImage, nil, nil, nil);
UIGraphicsEndImageContext();

}];

0 个答案:

没有答案