2013-03-20 8 views
5

Bardzo podobne to answer, z wyjątkiem tego, że chcę wygenerować histogram dla nieruchomego obrazu.GPUImageHistogramFilter dla nieruchomego obrazu podającego dane zerowe

Poniżej przedstawiam, co robię, i daje histogram ze wszystkimi danymi 0. Czy jest jakaś sztuczka, aby to zadziałało?

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

Jakiś szczególny powód, dla którego autoreleasingujesz obiekt '' 'GPUImagePicture * original'''? Jest możliwe, że zostanie zwolniony na końcu metody. –

+0

@Andrew Theis Myślę, że GPUImage jest biblioteką inną niż ARC – aug2uag

+1

@ aug2uag GPUImage jest kompatybilny z ARC – Andrea

Odpowiedz

0

Brad zmieniła jakiś wewnętrzny mechanizm GPUImage poprawić zarządzanie pamięcią (i to robi) w ostatnich wydaniach, teraz trzeba powiedzieć filtr zachować ramkę do zdjęć -useNextFrameForImageCapture.

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