我在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,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下工作,但如果我尝试创建一个包含数千帧的电影,我的内存就会耗尽.这也让我觉得我没有使用正确的方法.
解决方法 你做对了,但你做错了.QTKit中没有改变正确的方法.您的错误在于您在完成图像之前尝试添加图像,这在您解锁焦点时会发生.由于在尝试添加图像(20次)之前没有解锁焦点,因此您尝试添加未完成的图像(20次),这不起作用.
“越界”异常是因为图像没有表示.看来,QTMovIE试图循环遍历图像返回的数组以响应表示消息,但该数组为空,因为图像未完成.
不知何故,你在Leopard中侥幸逃脱了这一点(可能是由于SNow Leopard中的实现细节发生了变化),但我会说这不过是你的错误.
解决方案只是在每次循环时锁定焦点并解除对图像的关注:
float blendValue;for (blendValue = 0.0; blendValue <= 1.0; blendValue += 0.05) { [anImage lockFocus]; [[NSGraphicsContext currentContext] setShouldAntialias:NO]; [[[NScolor bluecolor] blendedcolorWithFraction:blendValue ofcolor:[NScolor redcolor]] setFill]; [NSBezIErPath fillRect:NSMakeRect(0,frameSize)]; [anImage unlockFocus]; [mMovIE addImage:anImage forDuration:duration withAttributes:myDict];}总结
以上是内存溢出为你收集整理的objective-c – 如何从一系列生成的图像创建Quicktime影片?全部内容,希望文章能够帮你解决objective-c – 如何从一系列生成的图像创建Quicktime影片?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)