kCGImagePropertyGIFLoopCount returns 错误值
kCGImagePropertyGIFLoopCount returns wrong value
我有三个 GIF 文件作为 NSData 加载。
当我使用键 kCGImagePropertyGIFLoopCount
检索 LoopCount 时,它 returns 是一个错误的值。
对于应该无限循环的GIF,它returns 0(正确)。
对于循环次数为 1 的 GIF,它 returns 0(不正确)。
对于循环计数为 2 的 GIF,它 returns 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:
有人知道我在这里做错了什么还是错误?
我找到了答案。
属性 在不循环时 不存在 (即播放计数 = 1)。
这是我的错误,因为 gifProperty
字典 returns 对象而不是原始类型。返回的对象是一个 NSNumber,它被转换为默认值为 0
的 int。我没有检查 nil
我有三个 GIF 文件作为 NSData 加载。
当我使用键 kCGImagePropertyGIFLoopCount
检索 LoopCount 时,它 returns 是一个错误的值。
对于应该无限循环的GIF,它returns 0(正确)。
对于循环次数为 1 的 GIF,它 returns 0(不正确)。
对于循环计数为 2 的 GIF,它 returns 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:
有人知道我在这里做错了什么还是错误?
我找到了答案。
属性 在不循环时 不存在 (即播放计数 = 1)。
这是我的错误,因为 gifProperty
字典 returns 对象而不是原始类型。返回的对象是一个 NSNumber,它被转换为默认值为 0
的 int。我没有检查 nil