ios - CGBitmapInfo 值在 iOS 上的表现

标签 ios iphone ipad drawing quartz-2d

我正在 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)更好地兼容,因为这对性能没有影响。

关于ios - CGBitmapInfo 值在 iOS 上的表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665615/

相关文章:

ios - 如何快速获取手机的型号名称

ios - 快速解析检查用户输入的输入并刷新值

iphone - 无法获取日历标题

ios - 是否可以在 iOS 9 上将 iPad 应用程序设置为不进行多任务处理

ios - iPad 多任务支持需要这些方向

ios - X 轴的 Google Live 图形值按降序排列

ios - 滚动表格 View 时值会发生变化

php - Json 和图像

iphone - 如何从数组中特定索引处删除对象

iphone - 有没有办法在不离开 App 的情况下将评分发送到 App Store?