我用于测试目的的应用程序能够拍照并将其保存为PNG文件。下次启动应用程序时,它会检查文件是否存在,如果存在,则存储在文件中的图像将用作应用程序的背景视图。到目前为止一切都还可以。
我决定在这个应用程序中添加一个剪贴蒙版,以防出现问题。 剪辑本身有效,但出于某种神秘的原因,剪切的图像会被扩展。如果有人能告诉我我做错了什么会非常有帮助。
以下是相关代码(如果需要,我可以提供更多信息):
if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) {
stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) {
(imageDataSampleBuffer, error) -> Void in
if error == nil {
var localImage = UIImage(fromSampleBuffer: imageDataSampleBuffer)
var imageSize = CGSize(width: UIScreen.mainScreen().bounds.height * UIScreen.mainScreen().scale,
height: UIScreen.mainScreen().bounds.width * UIScreen.mainScreen().scale)
localImage = resizeImage(localImage!, toSize: imageSize)
imageSize = CGSize(width: imageSize.height, height: imageSize.width)
UIGraphicsBeginImageContext(imageSize)
CGContextRotateCTM (UIGraphicsGetCurrentContext(), CGFloat(M_PI_2))
localImage!.drawAtPoint(CGPoint(x: 0.0, y: -imageSize.width))
localImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Clipping code:
localImage = maskImage(localImage!,
path: UIBezierPath(CGPath: CGPathCreateWithEllipseInRect(UIScreen.mainScreen().bounds, nil)))
if let data = UIImagePNGRepresentation(localImage!) {
data.writeToFile(self.bmpFilePath, atomically: true)
}
} else {print("Error on taking a picture:\n\(error)")}
}
}
maskImage函数是这个(取自iOS UIImage clip to paths并转换为Swift):
func maskImage(originalImage :UIImage, path:UIBezierPath) -> UIImage {
UIGraphicsBeginImageContextWithOptions(originalImage.size, false, 0);
path.addClip()
originalImage.drawAtPoint(CGPointZero)
let maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return maskedImage;
}
当行:
localImage = maskImage(localImage!,
path: UIBezierPath(CGPath: CGPathCreateWithEllipseInRect(UIScreen.mainScreen().bounds, nil)))
被评论出来,我看到了我的期望。
重新启动应用程序时,请将下面的图片作为背景信息。
但是当它们存在(没有注释掉)时,我会在重新启动应用程序时获得背景(当然,在开始时使用相同的图片):
如果事情有效,鼠标应该出现在椭圆形剪辑内,其大小与第一张图片相同(不会像现在那样放大)。