我有一个 RGBA malloc-ed 数据的原始位图图像;行显然是 4 个字节的倍数。此数据实际上源自 AVI(24 位 BGR 格式),但我将其转换为 32 位 ARGB。每帧大约有 8mb 的 32 位数据 (1920x1080)。
对于每一帧:
- 我通过 将该帧的数据转换为
NSData
对象NSData:initWithBytes:length
。 - 然后我
CIImage
通过CIImage:imageWithBitmapData:bytesPerRow:size:format:colorSpace
. - 从那开始
CIImage
,我NSOpenGLView
使用NSOpenGLView:drawImage:inRect:fromRect
. 由于目标图像的“马赛克”性质,大约有 15-20 次使用各种源/目标 Rect 对此进行调用。
使用 30hzNSTimer
调用2012 MacMini/2.6ghz/i7[self setNeedsDisplay:YES]
时NSOpenGLView
,我可以达到大约 20-25fps——它在 30hz 时并不坚如磐石。NSTimer
这可以用 a而不是 a来预期CVDisplayLink
。
但是......暂时忽略这个NSTimer
问题,是否有任何建议/指针可以让这种逐帧渲染更有效?
谢谢!
注意:我想坚持使用CIImage
对象,因为我想在某些时候访问过渡效果。