我正在 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 | 运行测试kCGBitmapByteOrder32Big
与 kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little
分析器确实向我展示了代码路径略有不同。
kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little
直接复制内存,而 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big
经过一个转换函数。
这对在我的 CGBitmapContext
中绘制路径(甚至在 iPod 4 上)然后调用 setNeedsDisplayInRect:
显示它们所花费的总时间几乎没有影响屏幕。此外,由于总体时间基本相同,我坚持使用 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big
.
编辑
我切换回 kCGBitmapByteOrder32Little
以便与其他使用 BGRA(小端)字节顺序的 iOS 框架(如 AVFoundation)更好地兼容,因为这对性能没有影响。
关于ios - CGBitmapInfo 值在 iOS 上的表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665615/