【发布时间】:2010-08-25 13:19:22
【问题描述】:
我有一个从 CGImage 中绘制图像的应用程序。
使用 CGImageSourceCreateImageAtIndex 加载 CImage 本身以从 PNG 文件创建图像。
这构成了精灵引擎的一部分 - 单个 PNG 文件上有多个精灵图像,因此每个精灵都有一个 CGRect 定义它在 CGImage 上的位置。
问题是,CGContextDraw 只接受一个目标矩形 - 并拉伸源 CGImage 以填充它。
因此,要绘制每个精灵图像,我们需要使用 CGImageCreateWithImageInRect() 从原始源创建多个 CGImage。
起初我认为这将是一个“便宜”的操作 - 每个 CGImage 似乎没有必要包含自己的图像位副本 - 但是,分析表明使用 CGImageCreateWithImageInRect() 是相当昂贵的操作。
是否有更优化的方法可以将 CGImage 的子部分绘制到 CGContext 上,这样我就不需要经常使用 CGImageCreateWithImageInRect() 了?
鉴于缺少源矩形,以及从 CGImage 上的矩形制作 CGImage 的便利性,我开始怀疑 CGImage 可能实现了写时复制语义,其中由 CGImage 制作的 CGImage 将引用与父级相同物理位的子矩形。 分析似乎证明这是错误的:/
【问题讨论】:
标签: cocoa core-graphics cgimage