Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSImage vs.CIImage vs.CGImage?_Objective C_Cocoa_Image - Fatal编程技术网

Objective c NSImage vs.CIImage vs.CGImage?

Objective c NSImage vs.CIImage vs.CGImage?,objective-c,cocoa,image,Objective C,Cocoa,Image,什么时候应该使用每个?NSImage是一种抽象数据类型,可以表示多种不同类型的图像,也可以表示一个图像的多种表示形式。当图像的实际类型对您要做的事情不重要时,它通常很有用。它也是AppKit在其API(NSImageView等)中接受的唯一图像类 CGImage只能表示位图。如果您需要使用实际的位图数据,CGImage是一种合适的类型。CoreGraphics中的操作(如混合模式和遮罩)需要CGImageRef。CGIMAGEREF可用于创建NSBITMAPIMAGEREF,然后将其添加到NSI

什么时候应该使用每个?

NSImage是一种抽象数据类型,可以表示多种不同类型的图像,也可以表示一个图像的多种表示形式。当图像的实际类型对您要做的事情不重要时,它通常很有用。它也是AppKit在其API(NSImageView等)中接受的唯一图像类

CGImage只能表示位图。如果您需要使用实际的位图数据,CGImage是一种合适的类型。CoreGraphics中的操作(如混合模式和遮罩)需要CGImageRef。CGIMAGEREF可用于创建NSBITMAPIMAGEREF,然后将其添加到NSImage

我认为该文档最能描述CIImage:

尽管CIImage对象具有与其关联的图像数据,但它不是图像。您可以将CIImage对象视为图像“配方”。CIImage对象具有生成图像所需的所有信息,但核心图像在被告知之前不会实际渲染图像。这种“惰性评估”方法允许核心映像尽可能高效地运行

CIImages是使用Mac OS X附带的各种GPU优化核心图像过滤器所需的类型,但与CGIMAGEREF一样,它们也可以转换为NSBITMAPIMAGEREP