我需要從一系列生成的圖像中創建電影。 (我正在創建基於物理建模程序輸出的圖像)。如何從一系列生成的圖像創建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