这个问题可能也适用于其他第一次写CIFilter的人。我需要关于更新Mac (基于QTKitPlayer)的视频播放器QTKit应用程序以使用CIFilters的建议。我已经阅读了图像单元和核心图像指南。我已经使用CIPlugIn loadAllPlugIns成功地让应用程序加载并运行内置的CIFilters。
我还成功地编写了我的第一个CIFilter,将其包装为一个图像单元,并将其放入/Library/Graphics/Image Units中,我已经使用Quartz Composer成功地对其进行了测试,Quartz Composer加载并运行成功。我还成功地将它加载到Core Image Fun House中。
然而,修改后的QTKitPlayer应用程序无法加载我的CIFilter。断点显示所有内置CIFilters都已加载,但我的过滤器没有。
由于我是一个编写和使用CIFilters的新手,我担心我一定是错过了一些核心图像初始化代码,或者QTMovieView nib标志,或者编译器标志,或者别的什么。在调用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设置为过滤器,但我的应用程序仅设置为Nil。
我的QTKit应用程序缺少什么,它需要加载CIPlugin?
发布于 2011-07-23 15:09:23
感谢您的回复。我已经解决了这个问题。事实证明,这是XCode中的32位与64位构建问题。
我的项目是为发布版本设置的32位和64位插件二进制文件。但是,调试构建通常被设置为只构建“本机”二进制文件。由于这些项目要么是旧的,要么是修改过的示例代码项目,我花了一段时间才意识到问题出在旧的构建设置中,而不是新修改的代码中。
CIPlugIn loadAllPlugIns仅加载与应用程序二进制兼容的插件。因此,32位应用程序不会看到仅为64位构建的CIFilters。而且,64位应用程序不会看到仅为32位系统构建的插件。在我的例子中,FunHouse可以加载我的图像单元,而修改后的QTKitPlayer不能。我只需要修改项目的构建设置。
在升级到新的Mac、新的OSX和新的XCode之后,如果你遇到了微光地带的问题--检查你的构建设置。
发布于 2011-07-21 20:06:02
您确定为您的自定义筛选器使用正确的名称吗?
(CIFilter *ciFilter = [CIFilter filterWithName:@"MyDistortionWarp"];)这必须是类名(CIFilterClass),而不是插件(或图像单元)的名称。
https://stackoverflow.com/questions/6114211
复制相似问题