1个插件中有多个自定义过滤器?

时间:2014-05-18 20:37:59

标签: core-image

我正在为一个程序编写一些自定义CIFilter。基于CIKernel的kernelsWithString:将从同一个文件中获取多个内核(以及我现在无法回忆的一些类似线索)的事实,似乎我可以在1个插件中提供它们。我是在咆哮错误的树,还是这样可行?

我做了一个明显有缺陷的尝试,并且2个过滤器出现了。但是,有一个是有缺陷的,使用[[CIFilter filterWithName:filterName] attributes]就会为参数列表生成null。

我相信我现在已修复它,但[CIPlugIn loadAllPlugIns]“加载新添加的图像单元,但不会删除已加载的图像单元(以及它们包含的过滤器)。”我的修复程序被忽略了,或者我实际上没有修复它。除非有人知道卸载过滤器的方法(核心图像编程指南暗示是可能的),否则无法重新启动我无法确定。

1 个答案:

答案 0 :(得分:1)

显然我误解了CIPlugin系统是如何工作的:它不是全球性的。也就是说,每个程序加载的插件都独立于其他程序。因此,要更新插件,只需关闭所有正在使用它的程序,然后替换插件。

要回答主要问题,是的,在1个插件中放置多个过滤器相当容易。

  • 每个过滤器都需要它自己的XxxPlugInLoader : NSObject <CIPlugInRegistration>类和Xxx : CIFilter类。 (过滤器“bundleForClass似乎都来自同一个捆绑包。”
  • 内核可以在同一个* .cikernel文件中,但如果一起避免为每个过滤器加载* .cikernel(它不会受到伤害,但效率低下)。
  • 设置1个Description.plist和1个Description.strings,其中包含所有过滤器的信息。在plist中,每个过滤器的CIFilterClass条目必须与上面定义的CIFilter类匹配。每个过滤器CIAttributeDescription条目都是字符串文件的一个键。