2013-03-20 8 views
5

Sehr ähnlich ist das answer, außer dass ich ein Histogramm für ein Standbild erstellen möchte.GPUImageHistogramFilter für ein Standbild mit Nulldaten

Unten ist was ich tue, und es gibt ein Histogramm mit allen 0 Daten. Gibt es einen Trick, damit das funktioniert?

GPUImageFilter *filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB]; 

GPUImagePicture *original = [[[GPUImagePicture alloc] initWithImage:image] autorelease]; 

GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init]; 
[original addTarget:gammaFilter]; 
[gammaFilter addTarget:filter]; 

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

[histogramGraph forceProcessingAtSize:CGSizeMake(256.0, 330.0)]; 
[filter addTarget:histogramGraph]; 

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

[original addTarget:blendFilter]; 
[histogramGraph addTarget:blendFilter]; 

[blendFilter addTarget:gpuImageView]; 

[original processImage]; 
+0

Gibt es einen besonderen Grund für die Autoreleasing des '' 'GPUImagePicture * original''' Objekts? Es ist möglich, dass es am Ende der Methode freigegeben wird. –

+0

@AndrewTheis Ich denke, GPUImage ist eine Nicht-ARC-Bibliothek – aug2uag

+1

@ Aug2uag GPUImage ist ARC kompatibel – Andrea

Antwort

0

Brad einigen inneren Mechanismus GPUImage Speichermanagement zu verbessern (und es tut) in den letzten Versionen geändert hat, jetzt sollten Sie die Filter erzählen die Rahmenbilder für noch -useNextFrameForImageCapture zu halten.

UIImage *inputImage = [UIImage imageNamed:@"Lambeau.jpg"]; 

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage]; 
GPUImageSepiaFilter *stillImageFilter = [[GPUImageSepiaFilter alloc] init]; 

[stillImageSource addTarget:stillImageFilter]; 
[stillImageFilter useNextFrameForImageCapture] 
[stillImageSource processImage]; 

UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentFramebuffer]; 
Verwandte Themen