2014-05-06 53 views
0

我編寫了此代碼以通過UISlider和GPUImageBrightnessFilter更改UIImage的亮度。但每次我測試它的應用程序崩潰。通過uislider和gpuimage過濾器更改圖像的亮度

我的代碼:

- (IBAction)sliderBrightness:(id)sender { 

    CGFloat midpoint = [(UISlider *)sender value]; 
    [(GPUImageTiltShiftFilter *)brightnessFilter setTopFocusLevel:midpoint - 0.1]; 
    [(GPUImageTiltShiftFilter *)brightnessFilter setBottomFocusLevel:midpoint + 0.1]; 

    [sourcePicture processImage]; 
} 

- (void) brightnessFilter { 

    UIImage *inputImage = imgView.image; 

    sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
    brightnessFilter = [[GPUImageTiltShiftFilter alloc] init]; 
    // sepiaFilter = [[GPUImageSobelEdgeDetectionFilter alloc] init]; 

    GPUImageView *imageView = (GPUImageView *)self.view; 
    [brightnessFilter forceProcessingAtSize:imageView.sizeInPixels]; // This is now needed to make the filter run at the smaller output size 

    [sourcePicture addTarget:brightnessFilter]; 
    [brightnessFilter addTarget:imageView]; 

    [sourcePicture processImage]; 
} 
+0

我不確定這是你的問題 - 但是有可能你在之前的「亮度」操作完成之前嘗試在圖像上運行「亮度」效果? – YogevSitton

+0

我可以猜出你的意思,但你能舉個例子嗎?也許這可能是問題所在。 – user3608489

+0

[stillImageSource processImage];需要時間。如果你運行[stillImageSource processImage];再次之前[stillImageSource processImage];完成後,可能會導致一些問題(我記得我在使用GPUImage時遇到了這些問題)。 – YogevSitton

回答

1

讓我打的替代建築的建議。每次更改亮度時,不要創建GPUImagePicture和GPUImageBrightnessFilter,然後將其作爲UIImage保存到UIImageView,重用初始圖片並過濾並將其渲染到GPUImageView會更有效率。

看看我在GPUImage附帶的SimpleImageFilter示例中做了什麼。對於顯示在屏幕上的傾斜移動的圖像,我創建一次源圖像的GPUImagePicture,創建傾斜移位過濾器的一個實例,然後將輸出發送到GPUImageView。這樣可以避免進入UIImage的昂貴(性能和內存方面)過程,然後將其顯示在UIImageView中,而且速度要快得多。當你在這個過程中,你可以在你的過濾器上使用-forceProcessingAtSize:來呈現最終視圖中顯示的儘可能多的像素,同時也可以加快速度。

當你有正確的設置來過濾你的圖像,並且你想要最終的UIImage出來時,你可以做最後一次渲染過程來提取處理過的UIImage。在此之前,您將強制大小設置回0,因此您現在可以處理完整圖像。

+0

感謝您的幫助布拉德。我是xcode中的新成員,並且不知道在我的教程之後編寫的代碼塊是否正確。你可以看看嗎?我將它添加到我的問題。 – user3608489

+0

@ user3608489 - 不,新代碼不會執行我所描述的操作。您需要提前設置過濾器並查看連接,並且只調整滑塊方法中的過濾器設置。您仍然從UIImageView中獲取UIImage,重建過濾器鏈,並在每次更新過濾器時從中獲取UIImage。再次看看SimpleImageFilter示例以及它如何將其傾斜移動顯示在屏幕上。 –

+0

好吧,現在我認爲它應該是工作,如果你能幫我解決滑塊方法中的3錯誤(我更新了我的問題中的代碼)。非常感謝您的努力。 – user3608489

相關問題