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