2015-04-25 53 views
2

我目前正在嘗試使用GPUImage顯示直方圖。我目前有以下代碼:GPUImage在另一個視圖中顯示直方圖

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]; 

上面顯示的直方圖overplayed在我的previewView。 (然而,另一個問題,另一天閃爍,另一個問題)

我想在視圖上的特定位置的小視圖上顯示此直方圖。我怎樣才能做到這一點?

+3

我想'GPUImageTransformFilter'具有平移變換將是一個良好的開端。 –

+1

我不能是唯一想要在單獨的視圖上顯示此圖的人嗎?我可以想象有一種正式的方法可以將這個問題轉化爲另一種觀點。 – Gizmodo

回答

3

要在分開的視圖中顯示直方圖,您需要爲主視圖和點直方圖過濾器添加另一個GPUImageView。這裏是基於SimpleImageFilter示例的源代碼。

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

而且最終的結果:
enter image description here

+0

謝謝!我成功地將它展現出來。現在,用您的方法,我該如何提取亮度或僅RGB的直方圖? – Gizmodo

+0

完美。謝謝。 – Gizmodo

+1

我看到主要預覽窗口在使用此方法時顯着丟幀。任何想法如何改善?單獨隊列? – Gizmodo

相關問題