2016-05-11 15 views
0

Ich habe Zoomfunktion in der Kamera mit GPUImage getan. Aber wenn ich das Bild von der Kamera mit Zoom aufnehme und es speichere aber trotzdem als normales Bild abspare (kein Zoomen gefunden). Ich möchte in welchem ​​Modus ich ein Bild aufnehmen, das im Album gespeichert werden muss. Wie kann ich dieses Problem lösen? Jeder Vorschlag wird großartig sein. Danke Leute. Mein Code:Objective - C: Zoombild von einer Kamera mit GPUImage speichern?

- (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); 
      } 
     } 

    }]; 
    } 

Antwort

1

Verwenden Sie den folgenden Code und sie nützlich können Sie

+(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, Danke, ich habe mein Problem mit Hilfe des Codes gelöst. Du bist mein Held ... für den Tag !! –

+0

Willkommen, wenn Sie wirklich das Gefühl haben, dass meine Antwort Ihnen hilft, dann akzeptieren Sie bitte dieses und das Beste. – PSS

+0

Vielen Dank – PSS