GPUImage show histogram in another view

404 Views Asked by At

I am currently trying to display a histogram using GPUImage. I currently have following code:

GPUImageOutput<GPUImageInput> *filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramLuminance];
[self.stillCamera  removeTarget:filter];
GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init];
[self.stillCamera  addTarget:gammaFilter];
[gammaFilter addTarget:filter];

GPUImageHistogramGenerator *histogramGraph = [[GPUImageHistogramGenerator alloc] init];

[histogramGraph forceProcessingAtSize:CGSizeMake(500.0, 500)];
[filter addTarget:histogramGraph];

GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 0.75;
[blendFilter forceProcessingAtSize:CGSizeMake(500, 500)];

[self.stillCamera addTarget:blendFilter];
[histogramGraph addTarget:blendFilter];

[blendFilter addTarget:previewView];

Above shows the histogram overplayed over my previewView. (It does flicker however, another issue, another day)

I want to show this histogram on a smaller view in a particular location on the view. How can I do this?

1

There are 1 best solutions below

2
Sergey Kuryanov On BEST ANSWER

To show histogram in separate view you need add another GPUImageView to your main view and point histogram filter to it. Here is source code based on SimpleImageFilter sample.

- (void)loadView
{    
    CGRect mainScreenFrame = [[UIScreen mainScreen] applicationFrame];

    GPUImageView *primaryView = [[GPUImageView alloc] initWithFrame:mainScreenFrame];
    self.view = primaryView;

    UIImage *inputImage = [UIImage imageNamed:@"WID-small.jpg"];
    GPUImagePicture *sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];

    // Creating another view to show histogram
    GPUImageView *histView = [[GPUImageView alloc] initWithFrame:CGRectMake(mainScreenFrame.size.width - 100, mainScreenFrame.size.height - 100, 100, 100)];
    [primaryView addSubview:histView];

    // Create histogram filter and generator and point it to histogram view
    GPUImageOutput<GPUImageInput> *histFilter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramLuminance];
    GPUImageOutput<GPUImageInput> *histGenerator = [[GPUImageHistogramGenerator alloc] init];
    [histGenerator forceProcessingAtSize:histView.sizeInPixels];
    [sourcePicture addTarget:histFilter];
    [histFilter addTarget:histGenerator];
    // Note target - hist view
    [histGenerator addTarget:histView];

    // Setup sepia filter just to show main picture
    GPUImageOutput<GPUImageInput> *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
    [sepiaFilter forceProcessingAtSize:primaryView.sizeInPixels];
    [sourcePicture addTarget:sepiaFilter];
    // Note target - main view
    [sepiaFilter addTarget:primaryView];

    [sourcePicture processImage];
}

And final result:
enter image description here