1

這個問題也可能與其他第一次CIFilter編寫者有關。 我需要關於更新Mac OS X(基於QTKitPlayer)的視頻播放器QTKit應用程序以使用CIFilter的建議。我已經閱讀了圖像單元和核心圖像指南。我已經成功地使用[CIPlugIn loadAllPlugIns]來獲取應用程序來加載並運行內置的CIFilter。加載CiFilter時出現問題

我也成功地編寫了我的第一張CIFilter,將它封裝成一個圖像單元,並將它放到/ Library/Graphics/Image Units中 我用Quartz Composer成功地進行了測試,Quartz Composer加載並運行成功。我也成功地將它加載到Core Image Fun House中。

但是,改變的QTKitPlayer應用程序不會加載我的CIFilter。斷點顯示所有內置的CIFilters已加載,但我的過濾器沒有加載。

因爲我是一個新手編寫和使用CIFilters,我擔心我一定錯過了一些核心圖像初始化代碼,或QTMovieView筆尖旗標,或編譯器標誌,或其他東西。在調用loadAllPlugins之前是否需要做任何設置? 代碼如下:

[CIPlugIn loadAllPlugIns]; CIFilter * ciFilter = [CIFilter filterWithName:@「MyDistortionWarp」];

我檢查,看它是否與加載:

的NSArray * filterList = [CIFilter filterNamesInCategories:[NSArray的arrayWithObject:kCICategoryDistortionEffect]];

在調試過程中,我的CIFilter沒有出現在我的QTKitPlayer派生中的filterList中。但是,將相同的代碼插入到Core Image Fun House src中,則會顯示filterList包含我的過濾器。 FunHouse也將ciFilter設置爲過濾器,但我的應用程序只設置爲無。

我的QTKit應用缺失,需要加載CIPlugin?

回答

1

您確定要爲自定義過濾器使用正確的名稱嗎?

(CIFilter *ciFilter = [CIFilter filterWithName:@"MyDistortionWarp"];) 

這必須是類名(CIFilterClass)不插件(或圖像單元)的名稱。

2

感謝您的回覆。 我已經解決了這個問題。 原來是XCode中的32位與64位構建問題。

我的項目是爲發佈構建而設計的,它是32位和64位插件二進制文件。 但是,經常將Debug版本設置爲僅構建「本機」二進制文件。由於這些項目要麼是舊的,要麼是改變了示例代碼項目,我花了一段時間才意識到問題出現在舊版本設置中,而不是新修改的代碼。

[CIPlugIn loadAllPlugIns]只加載與應用程序二進制兼容的插件。所以,一個32位的應用程序不會看到CIFilters只爲64位構建。而且,64位應用程序不會看到只爲32位系統構建的插件。等等。在我的情況下,FunHouse可以加載我的圖像單元,而改變後的QTKitPlayer則無法加載。我只需要改變項目的構建設置。

聰明之詞 - 在升級到新的Mac之後,如果遇到暮光區問題,請使用新的OSX &新的XCode - 檢查您的構建設置。

相關問題