2014-03-24 115 views
4

我負責某人在我公司創建的舊項目,現在我必須使用XCode進行一些更改5.1'GPUImageOutput <GPUImageInput>'沒有可見的@interface聲明選擇器'imageFromCurrentlyProcessedOutputWithOrientation:'

的事情是,即使它編譯OK一年前(2013年春季)不現在編譯。該項目包含GPUImage庫子項目。這是錯誤的XCode產量:

爲 'GPUImageOutput < GPUImageInput>' 不可見@interface聲明 選擇 'imageFromCurrentlyProcessedOutputWithOrientation:'

,當我嘗試編譯這兩條線:

if(self.grayScaleOutput) 
{ 
    photo = [grayscaleFilter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp]; 
} 
else 
{ 
    photo = [blendFilter imageFromCurrentlyProcessedOutputWithOrientation:UIImageOrientationUp]; 
} 

我甚至讓的Xcode 5.1的變化我的項目的一些設置(它建議我這樣做),但沒有運氣。 任何提示?我需要激活的任何設置?一些ARC的苦難,它可能仍然保留在我的舊的代碼行?

注:我已經取代我用的是1歲GPUImage庫,用一個我剛剛新鮮從GitHub下載。也沒有運氣。

回答

18

對,我這個上週改變了界面,至於原因,我解釋here

總之,現在GPUImageFilters緩存使用幀緩存。這意味着從它們捕獲的圖像略有改變。爲了讓人們意識到這一點,我重新命名了所涉及的方法,雖然也許我可以找到另一種方法來警告你。新的等效項目是-imageFromCurrentFramebufferWithOrientation:,但在使用之前,您需要在過濾器上調用-useNextFrameForImageCapture以指示您將在下次運行此過濾器時提取圖像。這需要在GPUImagePicture源上使用-processImage之前調用,或者在使用-imageFromCurrentFramebufferWithOrientation:用於從視頻源提取過濾器之前調用。

這是必需的,因爲框架需要知道守住了比正常時間稍長緩存的幀緩衝區,而不是立即就返回到高速緩存以節省內存。這可以在照片捕獲過程中自動完成,或者使用便捷方法(如-imageByFilteringImage:),但需要在代碼中提取圖像時手動觸發。

+0

多麼糟糕的事情在我身邊。如果一切都發生在前幾天,沒有什麼會改變:) 無論如何,我改變了這兩個功能與你所描述的建議,一切都完美了。謝謝。 – Isaac

相關問題