LEADTOOLS (Leadtools assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
AnimationGlobalLoop Property
See Also 
Leadtools Namespace > RasterImage Class : AnimationGlobalLoop Property



Gets or sets a value indicating the global loop count for animated images. Supported in Silverlight, Windows Phone 7

Syntax

Visual Basic (Declaration) 
Public Property AnimationGlobalLoop As Integer
Visual Basic (Usage)Copy Code
Dim instance As RasterImage
Dim value As Integer
 
instance.AnimationGlobalLoop = value
 
value = instance.AnimationGlobalLoop
C# 
public int AnimationGlobalLoop {get; set;}
C++/CLI 
public:
property int AnimationGlobalLoop {
   int get();
   void set (    int value);
}

Property Value

An integer value that indicates the global loop count for animated images. The following are valid values:
Value Meaning
-1 No looping. This is the default value and it means this image is not animated. This is the case with multi-page TIF files, for example.
0 Continuous looping. The animation should repeat itself indefinitely.
< 0 N looping. The animation should repeat itself N times.

Example

This example will create an animated GIF file that shows the frame number moving into the four corners

Visual BasicCopy Code
' WIN32 API
   Const LOGPIXELSY As Integer = 90
   <DllImport("gdi32")> _
   Shared Function GetDeviceCaps(ByVal hdc As IntPtr, ByVal nIndex As Integer) As Integer
   End Function

   <DllImport("kernel32")> _
   Shared Function MulDiv(ByVal nNumber As Integer, ByVal nNumerator As Integer, ByVal nDenominator As Integer) As Integer
   End Function

   Sub AnimatedGIFExample()
      ' The GIF file will contain 4 frames
      Const frameCount As Integer = 4

      ' Each frame is 128 by 128 pixels (the GIF file will have double that size)
      Const frameWidth As Integer = 128
      Const frameHeight As Integer = 128

      ' Background colors
      Dim backColor() As RasterColor = _
      { _
         New RasterColor(&HFF, &H0, &H0), _
         New RasterColor(&H0, &HFF, &H0), _
         New RasterColor(&H0, &H0, &HFF), _
         New RasterColor(&HFF, &HFF, &H0) _
      }

      ' Foreground colors
      Dim foreColor() As RasterColor = _
      { _
         New RasterColor(&HFF, &HFF, &H0), _
         New RasterColor(&HFF, &H0, &H0), _
         New RasterColor(&H0, &HFF, &H0), _
         New RasterColor(&HFF, &H0, &H0) _
      }

      ' Delay in milliseconds
      Dim delay() As Integer = _
      { _
         1000, _
         1000, _
         1000, _
         1000 _
      }

      ' Left and top, we want the frames to move to each corner
      Dim offset() As LeadPoint = _
      { _
         New LeadPoint(0, 0), _
         New LeadPoint(frameWidth, 0), _
         New LeadPoint(frameWidth, frameHeight), _
         New LeadPoint(0, frameHeight) _
      }

      Dim disposalMethod() As RasterImageAnimationDisposalMethod = _
      { _
         RasterImageAnimationDisposalMethod.RestoreBackground, _
         RasterImageAnimationDisposalMethod.RestoreBackground, _
         RasterImageAnimationDisposalMethod.RestoreBackground, _
         RasterImageAnimationDisposalMethod.RestoreBackground _
      }

      Dim backgroundColor As RasterColor = RasterColor.FromKnownColor(RasterKnownColor.Yellow)

      Dim image As RasterImage = Nothing
      Dim myFont As Font = Nothing
      Dim myStringFormat As StringFormat = Nothing

      ' Create the frames
      For frame As Integer = 0 To frameCount - 1
         Dim frameImage As New RasterImage( _
            RasterMemoryFlags.Conventional, _
            frameWidth, _
            frameHeight, _
            24, _
            RasterByteOrder.Bgr, _
            RasterViewPerspective.BottomLeft, _
            Nothing, _
            IntPtr.Zero, _
            0)

         ' Set the frame properties
         frameImage.AnimationDelay = delay(frame)
         frameImage.AnimationOffset = offset(frame)
         frameImage.AnimationDisposalMethod = disposalMethod(frame)

         ' Background is white
         frameImage.AnimationBackground = backgroundColor

         ' Draw the number of the frame on its surface
         Dim hdc As IntPtr = RasterImagePainter.CreateLeadDC(frameImage)
         Dim g As Graphics = Graphics.FromHdc(hdc)
         Dim rc As New Rectangle(0, 0, frameWidth, frameHeight)

         Dim brush As New SolidBrush(RasterColorConverter.ToColor(backColor(frame)))
         g.FillRectangle(brush, rc)
         brush.Dispose()

         If (myFont Is Nothing) Then
            Dim fontHeight As Integer = MulDiv(72, GetDeviceCaps(hdc, LOGPIXELSY), 72)
            myFont = New Font("Consolas", fontHeight)

            myStringFormat = New StringFormat()
            myStringFormat.Alignment = StringAlignment.Center
            myStringFormat.LineAlignment = StringAlignment.Center
         End If

         Dim str As String = String.Format("{0}", frame + 1)

         brush = New SolidBrush(RasterColorConverter.ToColor(foreColor(frame)))
         g.DrawString(str, myFont, brush, rc, myStringFormat)
         brush.Dispose()

         g.Dispose()
         RasterImagePainter.DeleteLeadDC(hdc)

         If (image Is Nothing) Then
            image = frameImage
         Else
            image.AddPage(frameImage)
         End If
      Next

      myFont.Dispose()
      myStringFormat.Dispose()

      ' Setup the global image properties
      image.AnimationGlobalSize = New LeadSize(frameWidth * 2, frameHeight * 2)
      image.AnimationGlobalLoop = 0
      image.AnimationGlobalBackground = backgroundColor

      ' Convert this image to 8 bits/pixel
      Dim cmd As New ColorResolutionCommand( _
         ColorResolutionCommandMode.AllPages, _
         8, _
         RasterByteOrder.Rgb, _
         RasterDitheringMethod.None, _
         ColorResolutionCommandPaletteFlags.Optimized, _
         Nothing)
      cmd.Run(image)

      Dim codecs As New RasterCodecs()

      ' Setup the GIF save options
      Dim animationPalette() As RasterColor = image.GetPalette()
      codecs.Options.Gif.Save.SetAnimationPalette(animationPalette)
      codecs.Options.Gif.Save.UseAnimationPalette = True

      ' The GIF Animation width & height, loop and background are
      ' pulled automatically from the image

      ' Save the file
      Dim fileName As String = Path.Combine(LEAD_VARS.ImagesDir, "AnimatedGifFile.gif")
      codecs.Save(image, fileName, RasterImageFormat.Gif, 8, 1, image.PageCount, 1, CodecsSavePageMode.Overwrite)

      image.Dispose()

      codecs.Dispose()
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
// WIN32 API
   const int LOGPIXELSY = 90;
   [DllImport("gdi32")]
   extern static int GetDeviceCaps(IntPtr hdc, int nIndex);

   [DllImport("kernel32")]
   extern static int MulDiv(int nNumber, int nNumerator, int nDenominator);


   public void AnimatedGIFExample()
   {
      // The GIF file will contain 4 frames
      const int frameCount = 4;

      // Each frame is 128 by 128 pixels (the GIF file will have double that size)
      const int frameWidth = 128;
      const int frameHeight = 128;

      // Background colors
      RasterColor[] backColor =
      {
         new RasterColor(0xFF, 0x00, 0x00),
         new RasterColor(0x00, 0xFF, 0x00),
         new RasterColor(0x00, 0x00, 0xFF),
         new RasterColor(0xFF, 0xFF, 0x00)
      };

      // Foreground colors
      RasterColor[] foreColor =
      {
         new RasterColor(0xFF, 0xFF, 0x00),
         new RasterColor(0xFF, 0x00, 0x00),
         new RasterColor(0x00, 0xFF, 0x00),
         new RasterColor(0xFF, 0x00, 0x00)
      };

      // Delay in milliseconds
      int[] delay =
      {
         1000,
         1000,
         1000,
         1000
      };

      // Left and top, we want the frames to move to each corner
      LeadPoint[] offset =
      {
         new LeadPoint(0, 0),
         new LeadPoint(frameWidth, 0),
         new LeadPoint(frameWidth, frameHeight),
         new LeadPoint(0, frameHeight),
      };

      RasterImageAnimationDisposalMethod[] disposalMethod =
      {
         RasterImageAnimationDisposalMethod.RestoreBackground,
         RasterImageAnimationDisposalMethod.RestoreBackground,
         RasterImageAnimationDisposalMethod.RestoreBackground,
         RasterImageAnimationDisposalMethod.RestoreBackground
      };

      RasterColor backgroundColor = RasterColor.FromKnownColor(RasterKnownColor.Yellow);

      RasterImage image = null;
      Font font = null;
      StringFormat stringFormat = null;

      // Create the frames
      for(int frame = 0; frame < frameCount; frame++)
      {
         RasterImage frameImage = new RasterImage(
            RasterMemoryFlags.Conventional,
            frameWidth,
            frameHeight,
            24,
            RasterByteOrder.Bgr,
            RasterViewPerspective.BottomLeft,
            null,
            IntPtr.Zero,
            0);

         // Set the frame properties
         frameImage.AnimationDelay = delay[frame];
         frameImage.AnimationOffset = offset[frame];
         frameImage.AnimationDisposalMethod = disposalMethod[frame];

         // Background is white
         frameImage.AnimationBackground = backgroundColor;

         // Draw the number of the frame on its surface
         IntPtr hdc = RasterImagePainter.CreateLeadDC(frameImage);
         Graphics g = Graphics.FromHdc(hdc);
         Rectangle rc = new Rectangle(0, 0, frameWidth, frameHeight);

         Brush brush = new SolidBrush(RasterColorConverter.ToColor(backColor[frame]));
         g.FillRectangle(brush, rc);
         brush.Dispose();

         if(font == null)
         {
            int fontHeight = MulDiv(72, GetDeviceCaps(hdc, LOGPIXELSY), 72);
            font = new Font("Consolas", fontHeight);

            stringFormat = new StringFormat();
            stringFormat.Alignment = StringAlignment.Center;
            stringFormat.LineAlignment = StringAlignment.Center;
         }

         string str = string.Format("{0}", frame + 1);

         brush = new SolidBrush(RasterColorConverter.ToColor(foreColor[frame]));
         g.DrawString(str, font, brush, rc, stringFormat);
         brush.Dispose();

         g.Dispose();
         RasterImagePainter.DeleteLeadDC(hdc);

         if (image == null)
            image = frameImage;
         else
            image.AddPage(frameImage);
      }

      font.Dispose();
      stringFormat.Dispose();

      // Setup the global image properties
      image.AnimationGlobalSize = new LeadSize(frameWidth * 2, frameHeight * 2);
      image.AnimationGlobalLoop = 0;
      image.AnimationGlobalBackground = backgroundColor;

      // Convert this image to 8 bits/pixel
      ColorResolutionCommand cmd = new ColorResolutionCommand(
         ColorResolutionCommandMode.AllPages,
         8,
         RasterByteOrder.Rgb,
         RasterDitheringMethod.None,
         ColorResolutionCommandPaletteFlags.Optimized,
         null);
      cmd.Run(image);

      RasterCodecs codecs = new RasterCodecs();

      // Setup the GIF save options
      RasterColor[] animationPalette = image.GetPalette();
      codecs.Options.Gif.Save.SetAnimationPalette(animationPalette);
      codecs.Options.Gif.Save.UseAnimationPalette = true;

      // The GIF Animation width & height, loop and background are
      // pulled automatically from the image

      // Save the file
      string fileName = Path.Combine(LEAD_VARS.ImagesDir, "AnimatedGifFile.gif");
      codecs.Save(image, fileName, RasterImageFormat.Gif, 8, 1, image.PageCount, 1, CodecsSavePageMode.Overwrite);

      image.Dispose();

      codecs.Dispose();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
SilverlightVBCopy Code

Remarks

An image is considered to have animation if the value of AnimationGlobalLoop is not -1 and the image has more than one frame (PageCount is greater than 1).

When the value of this property is changed, the RasterImage.Changed event will fire with RasterImageChangedFlags set to RasterImageChangedFlags.AnimationProperties.

For more information, refer to Implementing Animation.

Requirements

Target Platforms: Silverlight, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only), Windows Phone 7

See Also