2017-11-17 17 views
0

C#에서 .gif 파일의 재생 시간을 어떻게 얻을 수 있습니까?cg로 .gif 파일의 재생 시간을 어떻게 구합니까?

애니메이션 gif 파일이 재생되는 동안 동작을 수행하고 싶지만 gif가 재생되는 시간을 얻는 방법을 찾을 수없는 이유가 있습니다.

+2

[애니메이션 GIF의 프레임 지속 시간 가져 오기] (https://stackoverflow.com/questions/3785031/getting-the-frame-duration-of-an-animated-gif)의 가능한 복제본 –

답변

1

는이 코드를 사용할 수 있습니다

public static class GifExtension 
    { 
     public static TimeSpan? GetGifDuration(this Image image, int fps = 60) 
     { 
      var minimumFrameDelay = (1000.0/fps); 
      if (!image.RawFormat.Equals(ImageFormat.Gif)) return null; 
      if (!ImageAnimator.CanAnimate(image)) return null; 

      var frameDimension = new FrameDimension(image.FrameDimensionsList[0]); 

      var frameCount = image.GetFrameCount(frameDimension); 
      var totalDuration = 0; 

      for (var f = 0; f < frameCount; f++) 
      { 
       var delayPropertyBytes = image.GetPropertyItem(20736).Value; 
       var frameDelay = BitConverter.ToInt32(delayPropertyBytes, f * 4) * 10; 
       // Minimum delay is 16 ms. It's 1/60 sec i.e. 60 fps 
       totalDuration += (frameDelay < minimumFrameDelay ? (int) minimumFrameDelay : frameDelay); 
      } 

      return TimeSpan.FromMilliseconds(totalDuration); 
     } 
    } 

편집 : 당신이 확실한 경우 은, 모든 프레임이 동일한 기간을 가지고 - 당신은 단지 걸릴 첫 번째를 지연시킬 수 있습니다.