我正在学习绘制UIImages和CGImages,使用CIFilters等。为了测试我的知识,我用滑块创建了一个小测试应用程序,以编程方式更改药水精灵的颜色并将其显示在屏幕上(使用CIHueBlendMode CIFilter)。在我完成之后,我想清理相对冗长的代码并注意到,不是从过滤器输出的CIImage到CGImage然后是UIImage,我可以使用UIImage的imageWithCIImage:方法直接从CIImage转到UIImage。
但是,当我尝试使用drawInRect:绘制结果UIImage时,没有绘制任何内容。当然,通过CGImage阶段可以纠正这个问题。我对此的理解是从CIImage制作UIImage会在UIImage中产生一个NULL CGImage属性,该属性在drawInRect:中使用。它是否正确?如果是这样,是否有更好的方式来显示CIImage而不是通过CGImage然后是UIImage?我可以画一个用CIImage制作的CGImage,但这会翻转图像,这会导致另一个问题。目前,我首先将我在UIImage中绘制的任何东西包起来照顾翻转。还有另一种更有效的方法吗?
太长;没有阅读:除了把它变成CGImage,还有UIImage和绘图之外,是否有更好的方法来绘制CIImages?绘制CGImages时处理翻转的最佳方法是什么?
感谢任何能够回答我的一些问题的人。 :)
答案 0 :(得分:1)
在对CIImage进行了一些研究之后,我现在意识到你不能跳过从CIImage制作CGImage的步骤,即使你可以,它也不会真的更有效率,因为你已经仍然必须处理CIImage无论如何。 CIImage实际上不是一个图像as noted in Apple's documentation,它在变成CGImage时会被处理。这也是为什么如果我在我的项目中使用Time Profiler,我会看到我的drawRect:方法中有99%的时间用在createCGImage:上,而不是使用CIFilters。
对于处理Core Graphics和iPhone之间坐标系变化的最有效方法,似乎将对象包装在UIImage实例中是最简单的(不确定最佳)方式。它简单而且相对有效。另一种选择是转换图形上下文。
如果我在三天内得不到比我自己更好的答案,我会将其标记为已接受。