我有一个从CGImage绘制图像的应用程序。CGImage的绘制部分
使用CGImageSourceCreateImageAtIndex加载CImage本身以从PNG文件创建图像。
这构成了一个精灵引擎的一部分 - 在单个PNG文件中有多个精灵图像,所以每个精灵都有一个CGRect,它定义了它在CGImage上的位置。
问题是,CGContextDraw只接受一个目标矩形 - 并拉伸源CGImage来填充它。
因此,要绘制每个精灵图像,我们需要使用CGImageCreateWithImageInRect()从原始源创建多个CGImages。
我一开始以为这是一个'便宜'的操作 - 它似乎并不需要每个CGImage都包含它自己的图像位拷贝 - 但是,剖析显示使用CGImageCreateWithImageInRect()昂贵的操作。
是否有一个更好的方法来绘制一个CGImage CGImage的一个子节到一个CGContext,所以我不需要经常CGImageCreateWithImageInRect()?
由于缺乏源矩形的,并且容易从一个CGImage一个矩形制作CGImage的我开始怀疑,也许CGImage实施的写入时复制语义,其中一个CGImage从CGImage制成将涉及与父节点相同的物理位的子节点。 分析似乎证明这个错误:/
如果我以避免“低效率”的方式来避免这种情况,那将是讽刺的事,事实证明这种方法的效率和速度更快。 – 2010-08-25 14:23:24
CGImage对于某些东西比较好,尤其是读取和写入栅格图像(使用Image I/O)。但NSImage对于某些东西也更好,比如独立于分辨率的绘图(因为NSImage的大小以点为单位,以像素为单位)。 Mac OS X上没有单一的最佳图像类。 – 2010-08-25 14:42:42