Objevtive - C:使用GPUImage保存来自摄像机的缩放图像?

时间:2016-05-11 06:49:45

标签: ios objective-c iphone camera gpuimage

我已经使用GPUImage在相机中完成了缩放功能。但是当我用变焦拍摄来自相机的图像并保存它但仍然保存为正常的图像(没有找到缩放)。我希望无论以何种模式捕获必须保存在相册中的图像。我怎样才能解决这个问题任何建议都会很棒。多谢你们。我的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.library = [[ALAssetsLibrary alloc] init];
    [self setViewLayOut];
    [self setupFilter];
    [self setZoomFunctionlityOnCamera];

}


- (void)setupFilter;
{
    videoCamera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    switch (filterType)
    {
        case GPUIMAGE_COLORINVERT:
        {
            self.title = @"Color Negative";
            filter = [[GPUImageColorInvertFilter alloc] init];
        };
        break;
        case GPUIMAGE_GRAYSCALE:
        {
            self.title = @"Black and White Positive";
            filter = [[GPUImageGrayscaleFilter alloc] init];
        };
        break;

        default: filter = [[GPUImageFilter alloc] init];
        self.title = @"Color Positive";
        break;
    }
    videoCamera.runBenchmark = YES;
    filterView =  (GPUImageView *)cameraView;
    [filter addTarget:filterView];
    [videoCamera addTarget:filter];
    [videoCamera startCameraCapture];
}



    - (IBAction)clickPhotoBtn:(id)sender {
    if (!isCameraPermissionAccessed) {
        [self showAccessDeinedMessage :@"Camera permission denied" withMessage:@"To enable, please go to settings and allow camera permission for this app."];
        return;
    }
    [videoCamera capturePhotoAsJPEGProcessedUpToFilter:filter withCompletionHandler:^(NSData *processedJPEG, NSError *error){
        if (error!=nil)
        {
            [self showErrorMessage:@"Unable to capture image" ];
            return ;
        }

        else {
             UIImage *image = [UIImage imageWithData:processedJPEG];
            if (filterType == GPUIMAGE_GRAYSCALE) {
            GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image];
            GPUImageColorInvertFilter *stillImageFilter = [[GPUImageColorInvertFilter alloc] init];
            [stillImageSource addTarget:stillImageFilter];
            [stillImageFilter useNextFrameForImageCapture];
            [stillImageSource processImage];
            UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentFramebuffer];
            UIImageWriteToSavedPhotosAlbum(currentFilteredVideoFrame, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

            }
        else{
            UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
            }
        }

     }];
   }

1 个答案:

答案 0 :(得分:1)

使用以下代码可能对您有所帮助

+(UIImage*)croppedImageWithImage:(UIImage *)image zoom:(CGFloat)zoom
{
    CGFloat zoomReciprocal = 1.0f / zoom;

    CGPoint offset = CGPointMake(image.size.width * ((1.0f - zoomReciprocal) / 2.0f), image.size.height * ((1.0f - zoomReciprocal) / 2.0f));
    CGRect croppedRect = CGRectMake(offset.x, offset.y, image.size.width * zoomReciprocal, image.size.height * zoomReciprocal);

    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([image CGImage], croppedRect);

    UIImage* croppedImage = [[UIImage alloc] initWithCGImage:croppedImageRef scale:[image scale] orientation:[image imageOrientation]];

    CGImageRelease(croppedImageRef);

    return croppedImage;
}