Recently at work, we had to find a way to examine Gif images to find out if they
were animated or not. It’s a good thing to know when dealing with banner advertising.
The solution was to create a method that would return a struct containing the data
about the Gif we needed. This is the struct:
public struct ImageInfo
{
public int Width;
public int Height;
public bool IsAnimated;
public bool IsLooped;
public int AnimationLength; // In milliseconds
}
>
And this is the method that returns the struct when given a file name:
using
System.Drawing.Imaging;> public static ImageInfo GetImageInfo(string path)
{
ImageInfo info
= new ImageInfo();
using (System.Drawing.Image image
= System.Drawing.Image.FromFile(path))
{
info.Height
= image.Height;
info.Width
= image.Width;
if (image.RawFormat.Equals(ImageFormat.Gif))
{
if (System.Drawing.ImageAnimator.CanAnimate(image))
{
FrameDimension frameDimension
= new FrameDimension(image.FrameDimensionsList[0]);
int frameCount
= image.GetFrameCount(frameDimension);
int delay
= 0;
int this_delay
= 0;
int index
= 0;
for (int f
= 0; f < frameCount; f++)
{
this_delay
= BitConverter.ToInt32(image.GetPropertyItem(20736).Value, index) * 10;
delay
+= (this_delay < 100 ? 100 : this_delay); // Minimum delay is 100 ms
index
+= 4;
}
info.AnimationLength
= delay;
info.IsAnimated
= true;
info.IsLooped
= BitConverter.ToInt16(image.GetPropertyItem(20737).Value, 0)
!= 1;
}
}
}
return info;
}
Example of use
Here is an example of a web page that writes the Gif info out in the response stream:
ImageInfo info
= GetImageInfo(@"c:\artists.gif");
System.Text.StringBuilder sb
= new System.Text.StringBuilder();
sb.AppendLine("animation
length: " + info.AnimationLength);
sb.AppendLine("height: " + info.Height);
sb.AppendLine("width: " + info.Width);
sb.AppendLine("is
animated: " + info.IsAnimated);
sb.AppendLine("is
looped: " + info.IsLooped);
Response.Write(sb.ToString().Replace(Environment.NewLine, "<br
/>"));
This is the outcome of those lines of code on a web page:
animation length: 4340
height: 81
width: 63
is animated: True
is looped: True
* $4.95/month BlogEngine.net Hosting – Click Here!