3

在我的 Mac OS X 应用程序中,对的调用GCContextDrawImage成为一个瓶颈,尤其是在视网膜屏幕上。我设法通过在 blitting 时避免颜色空间转换来缓解它,Mac OS X 10.11 SDK,但它似乎仍然比我预期的要慢。

在使用 Instruments 调查堆栈转储时,我注意到在两个名称非常可疑的函数上花费了大量时间,vImageDebug_CheckDestBuffer即调用_ERROR_Buffer_Write__Too_Small_For_Arguments_To_vImage__CheckBacktrace. 请参阅下面的完整堆栈转储。

在我看来,这像是某种调试断言?我是否在没有意识到的情况下运行 vImage 库的调试版本?我能做些什么来阻止这些功能吸走我所有宝贵的周期吗?

使用 Instruments 捕获的堆栈跟踪

4

2 回答 2

1

通过确保源位图的每条扫描线中的像素数据的开头与 16 字节对齐,解决了性能问题。这样做似乎可以大大加快图像绘制速度。如果您分配新图像,默认情况下会发生这种情况,但是我们将 CGImage 包裹在未对齐的现有像素缓冲区周围。

于 2020-11-20T08:31:26.647 回答
0

图形上下文(第一个参数)呢?你从其他线程传递它吗?如果您将在主线程中获取上下文,然后在主线程中也绘制图像怎么办?

于 2019-10-23T01:01:40.653 回答