代码之家  ›  专栏  ›  技术社区  ›  Aaron Bratcher

如何从GPUImage相机获取UIImage?

  •  2
  • Aaron Bratcher  · 技术社区  · 10 年前

    我知道我可以用静态相机 capturePhotoAsImageProcessedUpToFilter 方法,但它会发出快门咔嚓声,我还有一些处理要做,所以我不希望它发出声音。

    我试过使用过滤器 imageFromCurrentFramebuffer 方法,但这总是变成零。

    CGRect frame = CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width);
    _backgroundImageView = [[GPUImageView alloc] initWithFrame:frame];
    [self.view insertSubview:_backgroundImageView atIndex:0];
    
    _camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:AVCaptureDevicePositionBack];
    _camera.outputImageOrientation = UIInterfaceOrientationLandscapeRight;
    filter = [[GPUImageBrightnessFilter alloc] init];
    filter.brightness = 0;
    
    [_camera addTarget: filter];
    
    [filter addTarget:_backgroundImageView];
    [_camera startCameraCapture];
    // processTimer is to periodically do processing on what's being shown on screen.
    processTimer =[NSTimer timerWithTimeInterval:10 target:self selector:@selector(processImage) userInfo:nil repeats:NO];
    [[NSRunLoop mainRunLoop] addTimer:processTimer forMode:NSRunLoopCommonModes];
    
    
    -(void) processImage {
        [processTimer invalidate];
    
        UIImage *testImage = [filter imageFromCurrentFramebuffer]; // always nil
    
        [_camera capturePhotoAsImageProcessedUpToFilter:filter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
    
             // additional processing here ... don't want shutter sound yet.
    
        }];
    }
    
    2 回复  |  直到 10 年前
        1
  •  0
  •   LorikMalorik    10 年前

    您可以使用以下方法从链中的任何过滤器获得无快门声音的UIImage:

    - (UIImage *)imageFromCurrentFramebuffer

    属于 GPUImageOutput 它是子类: GPUImageVideoCamera , GPUImageStillCamera , GPUImageFilter

    如果您的目标是显示视口,请使用 GPUImageView 作为过滤器链中的最后一项。

        2
  •  0
  •   Aaron Bratcher    8 年前

    好的……终于得到了问题的答案。在调用imageFromCurrentFramebuffer之前,我需要在过滤器上调用useNextFrameForImageCapture。这有时仍然返回零,但得到了我所需要的。