2016-05-11 178 views
0

我已經用GPUImage在相機中完成了縮放功能。但是當我用變焦從相機捕捉圖像並保存它,但仍保存爲正常圖像(沒有找到變焦)。我希望以任何模式捕捉必須保存在相冊中的圖像。我如何解決這個問題任何建議都會很棒。多謝你們。我的代碼:目標 - C:保存從GPUImage攝像頭縮放Caputre圖像?

- (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

下面的代碼使用它可以幫助你

+(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; 
} 
+0

@ PSS,謝謝,我已經解決了我的問題與您的代碼的幫助。你是我的英雄......每一天! –

+0

歡迎,如果你真的覺得我的答案幫助你,那麼請接受這個答案最好。 – PSS

+0

非常感謝 – PSS