Мне нужно создать фильм из серии сгенерированных изображений. (Я создаю изображения на основе результатов программы физического моделирования.)
Я нашел образец Apple в QtKitCreateMovie и использовал его в качестве отправной точки. Вместо того, чтобы загружать jpg из пакета приложения, я рисую в 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), но копирование, которое я проверял в последний раз, было значительно быстрее. - person Peter Hosey   schedule 14.05.2011+[NSBezierPath fillRect:]
наNSRectFill
. В моем реальном коде я рисую изогнутые пути. - person SSteve   schedule 14.05.2011