gpt4 book ai didi

objective-c - QTMovie index of out bounds exception when trying to addImage :forDuration:withAttributes

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:39 26 4
gpt4 key购买 nike

我正在尝试使用 QTKit 在 Cocoa 中创建电影。这部电影应该由我创建的一堆 NSImage 组成。我遇到了一些问题。总体问题是没有创建电影。我得到一个似乎是空的文件,只包含几百个字节,但没有电影可言。无论如何,代码是:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"Creating .mov out of NSImage(s)");

NSError *error = nil;

// Create empty QTMovie with writable data reference
QTMovie *movie = [[QTMovie alloc] initToWritableFile:@"Temp.mov" error:&error];

// If an error occurred, print it
if ( error )
NSLog(@"Error creating movie: %@", [error localizedDescription]);

// Sanity-check to see that our movie is writable
assert([[movie attributeForKey:QTMovieEditableAttribute] boolValue] == YES);

// Load our image
NSImage *image = [NSImage imageNamed:@"screen-1"];

// Check that our image is loaded
assert(image != nil);

// Add the image to our movie, duration is 6000 / 600 = 10 seconds?
NSDictionary *attributesForImage = [NSDictionary dictionaryWithObjectsAndKeys:@"tiff", QTAddImageCodecType, nil];
[movie addImage:image forDuration:QTMakeTime(6000, 600) withAttributes:attributesForImage];

// Store our movie in a file called "Done.mov"
// flattening it seems like a good idea
NSDictionary *attributesForExport = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],
QTMovieFlatten, nil];
error = nil;
BOOL didSucceed = [movie writeToFile:@"Done.mov" withAttributes:attributesForExport error:&error];

if ( ! didSucceed || error )
NSLog(@"Did not succeed. Error was: %@", [error localizedDescription]);
else
{
// If we did succeed, error should be nil, right?
assert(error == nil);

NSLog(@"Did succeed.");
}

// Cleanup
[movie release];
[[NSFileManager defaultManager] removeItemAtPath:@"Temp.mov" error:nil];
[NSApp terminate:nil];
}

要注意的是 [movie addImage...。这是发生错误的地方。我得到以下异常:

eException', reason: '*** -[NSArray objectAtIndex:]: index (0) beyond bounds (0)'
*** Call stack at first throw:
(
0 CoreFoundation 0x90e806ba __raiseError + 410
1 libobjc.A.dylib 0x97cde509 objc_exception_throw + 56
2 CoreFoundation 0x90ec5321 -[__NSArray0 objectAtIndex:] + 209
3 QTKit 0x9387492c -[QTMovie_QuickTime addImage:forDuration:atTime:withAttributes:] + 708
4 QTKitServer 0x000208ba do_addImageAtTimeWithAttributes + 327
5 QTKitServer 0x0000cb03 _XaddImageAtTimeWithAttributes + 291
6 QTKitServer 0x000021bb QTKitServer_server + 113
7 QTKitServer 0x0001e194 mach_port_callback + 84
8 CoreFoundation 0x90dee772 __CFMachPortPerform + 338
9 CoreFoundation 0x90dea4db __CFRunLoopRun + 6523
10 CoreFoundation 0x90de8464 CFRunLoopRunSpecific + 452
11 CoreFoundation 0x90dee3a4 CFRunLoopRun + 84
12 QTKitServer 0x0001e702 main + 1068
13 QTKitServer 0x00002141 start + 53
)

我在 google 上搜索了很多,但没有找到任何能真正回答这个问题的东西。代码非常简单,看起来与那里的大多数代码示例完全相同。图片加载正常,但根本没有添加。有任何想法吗?如果相关的话,它是 JPEG 图像。

最佳答案

您的代码没问题。 [NSImage imageNamed:] 返回的 NSImage 实例似乎有问题。
尝试将该行替换为(假设您的图像已复制到包的资源文件夹中):

NSString* imagePath = [[[NSBundle mainBundle] resourcePath]     
stringByAppendingPathComponent:@"screen-1.jpg"];
NSImage* image = [[NSImage alloc] initWithContentsOfFile:imagePath];

不要忘记在将其添加到电影后添加 [image release]

关于objective-c - QTMovie index of out bounds exception when trying to addImage :forDuration:withAttributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com