iphone ios NSImage CIImage CGImage 区别及应用Quartz, Quartz Extreme, Quartz 2D Extreme, Core Image

原文链接:http://blog.csdn.net/linzhiji/article/details/6738462

先来看一段e文

翻译一下:

    1)NSImage 是一个抽象类,它能代表各种图像类型,同时也能定义各种图像。通常,大家如果对图像的类型不在意的话,NSImage是很好用的。同时,他也是Appkit唯一能接受的图像类,至少到目前为止是这样。(Appkit , UIKit 是iphone里界面,UI的库)

    2)CGImage只能代表bitmaps。如果你像直接和bitmap 数据打交道,CGImage是很好的选择。对CGImage的操作都在Core graphics中,诸如混合(blend)和遮罩(masking)需要CGImageRef。 CGImageRef 能用来创建NSBitmapImageRep, 它能添加到NSImage。

    3)我认为官方文档对于CIImage的定义最为准确:

    尽管 CIImage 对象中包含了与它相关的图像数据,它并不是一个图像。你可以把 CIImage 对象看作一个图像“处方”。一个 CIImage 对象中包含了生成一个图像的所需要的所有信息,不过核心绘图系统在没有得到明确指令的情况下是不会绘制这个图像的。“懒惰评估”机制 (请参考“过滤器客户和过滤器创建者”) 允许核心绘图系统尽可能高效的运行

    基于Mac OS X的GPU优化图像滤镜各种算法,要求使用CIImages。但是,诸如 CGImageRefs,他们能转换为 NSBitmapImageReps

CIImage的使用见http://www.apple.com.cn/developer/mac/library/documentation/QuickTime/Conceptual/CoreImaging/ci_concepts/chapter_2_section_4.html

 

概要:

     从上面的定义可以看出,apple使用这些图像类,是为了配合不同的库。具体概念参考http://www.apple.com.cn/developer/mac/library/documentation/QuickTime/Conceptual/CoreImaging/ci_concepts/chapter_2_section_1.html#//apple_ref/doc/uid/TP30001185-CH202       

    对于apple绘图体系一些概念描述:

Quartz, QE, QE2D, CI
看到论坛上有许多贴子都提到了Quartz, Core Image,但是却又有不少概念上的错误。事实上,由于Apple本身在用词上的模糊,许多人对Quartz, Quartz Extreme, Quartz 2D Extreme, Core Image之间的区别并不是很清楚。这里就向你简单地介绍它们之间的关系。
1. Quartz是什么?
Quartz 是Mac OSX上的绘图体系结构,与其等同的是Classic Mac OS上的QuickDraw, Java中的Graphics/Graphics 2D和Windows中的GDI/GDI+。Quartz和传统的绘图体系结构不同,除了2D绘图功能外,Quartz还有一个额外的部分,用于把绘制好的图形组合成最终的屏幕输出。相应的,绘图的部分就被叫做Quartz 2D而合成的部分就叫做Quartz Compositor, 他们合在一起就叫做Quartz。
2.那么什么是Extreme, Extreme 2D?
我们知道了Quartz 2D 和 Quartz Compositor组成了Quartz, 那么什么是Quartz Extreme 和Quartz Extreme 2D呢?
最初在Mac OS X 10.0 - 10.1中Quartz是全部由软件完成的,从10.2开始Quartz中的 Quartz Compositor部分提供了硬件支持的实现,其原理是通过OpenGL的硬件加速,把需要组合的图形作为texture (3D 纹理) 交给图形卡的texture processor处理。因此提供硬件加速的Quartz Compositor的Quartz被叫做了Quartz Extreme
在Mac OS X 10.4中,不光Quartz Compositor提供了硬件加速,连Quartz 2D也提供了硬件加速,此时当程序在绘制窗口图形时,Quartz 2D 只是把PDF (postscript )的绘图指令保存下来,当绘图结束后,再交给图形卡的2D加速单元绘制,然后再通过Quartz Compositor把不同窗口的绘制结果组合成最终的屏幕输出放到屏幕的Frame Buffer中。这种同时为Quartz 2D和Quartz Compositor提供硬件加速的Quartz被称作 Quartz 2D Extreme
3.什么是Core Image呢?
Core Image是在10.4中提供的图像处理Framework。请注意图像处理(image processing)和绘图(drawing)是两个概念,图像处理类似于Photoshop的滤镜。事实上Core Image就提供了一个“滤镜”链,输入图像在经过一系列的“滤镜”后产生了输出图像。由于整个过程相当耗费CPU处理资源,因此Core Image可以通过OpenGL利用图形卡GPU的pixel shader来处理大量的运算,再一次Core Image是可以被硬件加速的。
4.那么CoreImage和Quartz 又有什么关系呢?
Quartz中的Quartz Compositor可能利用Core Image产生类似阴影等的特效,然后合成最终的屏幕输出。刚才我们说过了Quartz Extreme中Quartz Compositor可以利用硬件来合成图像,现在通过core image, 连图形特效(FX)也可以通过硬件加速了。结果是从绘制到特效到组合全面硬件加速。
5.硬件加速的好处
图形子系统是非常耗费CPU资源的处理过程,而每个操作系统的图形界面又大量依赖于图形子系统。如果能把这部分的消耗交由图形卡处理,那么CPU就可以省下更多的资源处理其他任务。很多unix的服务器系统为了节省CPU资源,不得不把图形界面去掉,以便服务更多的客户,如果全硬件加速可行的话,那么这些服务器系统就不需要消耗太多CPU处理时间用于用户界面了。

 

参考:

1.CGImage涉及到graphics contexts,它的定义:

    http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html

中文定义(不全)

   http://blog.csdn.net/diyagoanyhacker/article/details/6607533

2.既然有这么多中类型,那么类型间就需要互相转换:

   http://www.cocoachina.com/b/?p=11

3.图像需要处理,比如截图,缩放,设定大小,存储

    http://blog.csdn.net/xuhuan_wh/article/details/6434055

 

posted @ 2015-09-08 09:40  从良少年  阅读(340)  评论(0编辑  收藏  举报