【问题标题】:Draw UIImage From CIImage In drawRect:在 drawRect 中从 CIImage 绘制 UIImage:
【发布时间】:2012-09-01 20:25:34
【问题描述】:

我正在学习如何绘制 UIImages 和 CGI​​mages,使用 CIFilters 等。为了测试我的知识,我制作了一个带有滑块的小型测试应用程序,它以编程方式更改药水精灵的颜色并将其显示在屏幕上(使用 CIHueBlendMode CIFilter)。完成后,我想清理相对冗长的代码,并注意到我可以使用 UIImage 的 imageWithCIImage: 方法直接从 CIImage 到 UIImage,而不是从过滤器输出的 CIImage 到 CGImage 再到 UIImage。

但是,当我尝试使用 drawInRect: 绘制生成的 UIImage 时,没有绘制任何内容。当然,通过 CGImage 阶段可以纠正这一点。我对此的理解是,从 CIImage 制作 UIImage 会导致 UIImage 中的 NULL CGImage 属性,该属性用于 drawInRect:。它是否正确?如果是这样,有没有比通过 CGImage 和 UIImage 更好的方法来显示 CIImage?我可以只画一个用 CIImage 制作的 CGImage,但这会翻转图像,这会导致另一个问题。目前,我首先将我绘制的任何内容包装在 UIImage 中以处理翻转。还有其他更有效的方法吗?

太长了;未阅读: 除了将 CIImage 转换为 CGImage,然后是 UIImage 并进行绘制之外,还有更好的方法来绘制 CIImages 吗?绘制 CGImage 时处理翻转的最佳方法是什么?

感谢任何可以回答我的一些问题的人。 :)

【问题讨论】:

    标签: objective-c ios cocoa-touch core-image


    【解决方案1】:

    在对 CIImage 是什么进行了一些研究之后,我现在意识到你不能跳过从 CIImage 制作 CGImage 的步骤,即使你可以,它也不会真正变得更有效率,因为你会无论如何,仍然必须处理 CIImage。 CIImage 并不是真正的图像,as noted in Apple's documentation,它是在变成 CGImage 时进行处理的。这也是为什么如果我在我的项目中使用 Time Profiler,我会发现我在 drawRect: 方法中 99% 的时间都花在了 createCGImage: 上,而不是使用 CIFilters。

    至于处理 Core Graphics 和 iPhone 之间坐标系变化的最有效方法,似乎将对象包装在 UIImage 实例中是最简单(不确定最好)的方法。它很简单,而且相对有效。另一种选择是转换图形上下文。


    如果我在三天内没有得到比我自己更好的答案,我会将其标记为已接受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2014-01-06
      • 1970-01-01
      相关资源
      最近更新 更多