【问题标题】:trouble loading a CiFilter加载 CiFilter 时遇到问题
【发布时间】:2011-05-24 17:11:51
【问题描述】:

这个问题也可能与其他第一次使用 CIFilter 的作者有关。 我需要有关更新 Mac OS X 的视频播放器 QTKit 应用程序(基于 QTKitPlayer)以使用 CIFilters 的建议。我已经阅读了图像单元和核心图像指南。我已经使用 [CIPlugIn loadAllPlugIns] 成功让应用程序加载和运行内置 CIFilters。

我还成功编写了我的第一个 CIFilter,将其包装为图像单元,并将其放入 /Library/Graphics/Image Units 我已经用 Quartz Composer 成功地测试了它,它加载并成功运行。我在Core Image Fun House也成功加载了。

但是,更改后的 QTKitPlayer 应用程序不会加载我的 CIFilter。断点显示所有内置 CIFilter 都已加载,但我的过滤器没有。

由于我是编写和使用 CIFilters 的新手,我担心我一定错过了一些 Core Image 初始化代码、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?

【问题讨论】:

    标签: image-processing core-graphics quartz-graphics core-image


    【解决方案1】:

    感谢您的回复。 我已经解决了这个问题。 原来是 XCode 中的 32 位与 64 位构建问题。

    我的项目被设置为发布版本为 32 位和 64 位插件二进制文件。 但是,Debug 构建通常被设置为仅构建“本机”二进制文件。由于这些项目要么是旧的,要么是经过更改的示例代码项目,我花了一段时间才意识到问题出在旧的构建设置中,而不是新更改的代码。

    [CIPlugIn loadAllPlugIns] 仅加载与应用程序二进制兼容的插件。因此,32 位应用程序不会看到仅为 64 位构建的 CIFilter。而且,64 位应用程序不会看到仅为 32 位系统构建的插件。等等等等。就我而言,FunHouse 可以加载我的图像单元,而修改后的 QTKitPlayer 则不能。我只需要更改项目的构建设置。

    致智者的一句话——在升级到新的 Mac、新的 OSX 和新的 XCode 后,如果你遇到了 twilight zone 问题——检查你的构建设置。

    【讨论】:

      【解决方案2】:

      您确定为您的自定义过滤器使用正确的名称吗?

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

      这必须是类名 (CIFilterClass) 而不是插件(或图像单元)的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多