0

我有三个作为 NSData 加载的 GIF 文件。当我使用该键kCGImagePropertyGIFLoopCount检索 LoopCount 时,它返回一个错误的值。
对于应该无限循环的 GIF,它返回 0(正确)。
对于循环计数为 1 的 GIF,它返回 0(不正确)。
对于循环计数为 2 的 GIF,它返回 1(不正确)。

-(void)prepareGif:(NSData*)data {
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef) data, NULL);
CFDictionaryRef properties = CGImageSourceCopyProperties(source, nil);
NSDictionary* imageProperties = (__bridge NSDictionary*) properties;
NSDictionary* gifProperty = imageProperties[(NSDictionary*) kCGImagePropertyGIFDictionary];
int loopCount = [gifProperty[(NSString*) kCGImagePropertyGIFLoopCount] intValue]; // returns 0 for LoopCount 1 and LoopCount 0 and returns 1 for LoopCount 2

以下是三个 GIF: 有人知道我在这里做错了什么还是一个错误?
循环两次 循环一次 无限循环

4

1 回答 1

0

我找到了答案。该属性在不循环时不存在(即播放计数 = 1)。
这是我的错误,因为gifProperty字典返回对象而不是原始类型。返回的对象是一个 NSNumber,它被强制转换为 int,默认值为0. 我没有检查nil

于 2019-11-20T16:11:45.923 回答