我有两个GIF动画:
http://d-32.com/uploads/gif1.gif和http://d-32.com/uploads/gif2.gif
使用NSBitmapImageRep时,第一个gif的帧持续时间为0.15s
,第二个gif的帧持续时间为0.1s
。
但是对于第二个gif来说,0.1是减速的方法。
使用imagemagick时,我的第一个获得0.15s
,第二个gif获得0.03s
,这是正确的。
我做错了什么,或者是NSBitmapImageRep,即使用NSImageView显示gifs无用,我将不得不诉诸webview(可以正确显示两个GIF)?
答案 0 :(得分:0)
非常感谢Heinrich,我现在知道gif是两个值,真实值和钳位值。可悲的是NSBitmapImageRep只提供了限制值,但是使用CGImageProperty我可以读取这两个值。所以我遍历每一帧,用正确的帧更新持续时间,最后创建一个CAAnimation,如:https://github.com/orta/GIFs/blob/master/objc/GIFs/ORImageView.m
所以这是更新持续时间的代码:
NSDictionary *properties = (__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(imageSource, i, nil);
float duration = [[[properties objectForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary]
objectForKey:(__bridge NSString *) kCGImagePropertyGIFUnclampedDelayTime] doubleValue];
[bitmapRepresentation setProperty:NSImageCurrentFrame withValue:[NSNumber numberWithInt:i]];
[bitmapRepresentation setProperty:NSImageCurrentFrameDuration withValue:[NSNumber numberWithFloat:duration]];