kCGBitmapByteOrder32Big

kCGBitmapByteOrder32Big

我正在 UIView 的 drawRect 中绘制 CGBitmapContext 的片段。确保性能最佳的最佳 CGBitmapInfo 枚举值是什么?现在我正在使用 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big ,但我也看到了这个 stackoverflow 问题片段,它提出了一个替代方案:

Why does this code decompress a UIImage so much better than the naive approach?

// makes system don't need to do extra conversion when displayed.
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little

我的 CGBitmapContext 是可变的,因此用户可以在其上绘图、向其添加图像等。

最佳答案

我使用 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32BigkCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little 进行了测试,分析器确实向我显示代码路径略有不同。
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little 直接复制内存,而 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big 则经过一个转换函数。

这对在我的 CGBitmapContext(甚至在 iPod 4 上)中绘制路径然后调用 setNeedsDisplayInRect: 以在屏幕上显示它们所花费的总时间几乎没有影响。此外,由于总体时间基本相同,我坚持使用 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big

编辑
我切换回 kCGBitmapByteOrder32Little 以便与使用 BGRA(小端)字节顺序的其他 iOS 框架(如 AVFoundation)更好地兼容,因为对性能没有影响。

10-07 12:10