使用核心图像和AV基础进行裁剪

时间:2014-06-13 21:50:04

标签: ios camera uiimage avfoundation core-image

我正在使用AV Foundation拍摄照片,然后我将该图像裁剪成适合我的UI的正方形。在UI中,有两个半透明视图显示正在捕获的内容,我想裁剪图像以包含顶视图底部和底部视图顶部之间的内容:

冠捷 | 我想拍摄和裁剪的区域 | 底部视图

实际拍摄完整图像效果很好。问题是使用Core Image成功裁剪图像。

// Custom function that takes a photo asynchronously from the capture session and gives 
// the photo and error back in a block. Works fine.
[self.captureSession takePhotoWithCompletionBlock:^(UIImage *photo, NSError *error) {
    if (photo) {
        CIImage *imageToCrop = [CIImage imageWithCGImage:photo.CGImage];

        // Find, proportionately, the y-value at which I should start the 
        // cropping, based on my UI
        CGFloat beginningYOfCrop = topView.frame.size.height * photo.size.height / self.view.frame.size.height;
        CGFloat endYOfCrop = CGRectGetMinY(bottomView.frame) * photo.size.height / self.view.frame.size.height;

        CGRect croppedFrame = CGRectMake(0,
                                         beginningYOfCrop,
                                         photo.size.width,
                                         endYOfCrop - beginningYOfCrop);

        // Attempt to transform the croppedFrame to fit Core Image's
        // different coordinate system
        CGAffineTransform coordinateTransform = CGAffineTransformMakeScale(1.0, -1.0);
        coordinateTransform = CGAffineTransformTranslate(coordinateTransform, 
                                                         0,
                                                         -photo.size.height);

        CGRectApplyAffineTransform(croppedFrame, coordinateTransform);

        imageToCrop = [imageToCrop imageByCroppingToRect:croppedFrame];

        // Orient the image correctly
        UIImage *filteredImage = [UIImage imageWithCIImage:imageToCrop
                                                     scale:1.0
                                               orientation:UIImageOrientationRight];
    }
}];

0 个答案:

没有答案