我需要从一系列生成的图像中创建电影。 (我正在创建基于物理建模程序输出的图像)。如何从一系列生成的图像创建Quicktime电影?
我在QtKitCreateMovie中找到Apple的样本并将其用作起点。我不是从应用程序包加载jpgs,而是绘制到NSImage,然后将NSImage添加到电影对象。这是我用于测试的基本代码。 mMovie
是QTMovie
一个实例:
NSImage *anImage = [[NSImage alloc] initWithSize:NSMakeSize(frameSize, frameSize)];
[anImage lockFocus];
float blendValue;
for (blendValue = 0.0; blendValue <= 1.0; blendValue += 0.05) {
[[[NSColor blueColor] blendedColorWithFraction:blendValue ofColor:[NSColor redColor]] setFill];
[NSBezierPath fillRect:NSMakeRect(0, 0, frameSize, frameSize)];
[mMovie addImage:anImage forDuration:duration withAttributes:myDict];
}
[anImage unlockFocus];
[anImage release];
此作品在OS X 10.5,但在OS X 10.6,我得到一个数组索引超出边界上的呼叫例外addImage:forDuration:withAttributes
:(http://openradar.appspot.com/radar?id=1146401)
什么在10.6以下创建电影的正确方法?
此外,虽然这可以在10.5下工作,但如果我尝试使用数千帧创建电影,则内存不足。这也让我觉得我没有使用正确的方法。
你可以让你的颜色填充使用'NSRectFill'功能,它使用'NSCompositeCopy快一点',而不是'+ [NSBezierPath fillRect:]',默认为'NSCompositeSourceOver'。结果看起来没有什么不同(因为你填充的所有颜色都有1.0 alpha),但是最后我检查过的Copy的速度明显更快。 – 2011-05-14 09:50:05
另外,当没有填充曲线路径时,没有太多理由来设置上下文是否应该消除锯齿。 – 2011-05-14 10:12:06
谢谢,彼得。我将我的调用从'+ [NSBezierPath fillRect:]'更改为'NSRectFill'。在我的真实代码中,我绘制了弯曲的路径。 – SSteve 2011-05-14 15:41:32