Leadtools Namespace > RasterImage Class : AnimationGlobalLoop Property |
public int AnimationGlobalLoop {get; set;}
'Declaration Public Property AnimationGlobalLoop As Integer
'Usage Dim instance As RasterImage Dim value As Integer instance.AnimationGlobalLoop = value value = instance.AnimationGlobalLoop
public int AnimationGlobalLoop {get; set;}
get_AnimationGlobalLoop();
set_AnimationGlobalLoop(value);
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. |
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 Changed event will fire with RasterImageChangedFlags set to RasterImageChangedFlags.AnimationProperties.
For more information, refer to Implementing Animation.
' 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
// 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"; }
Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
RasterImage Class
RasterImage Members
AnimationWaitUserInput Property
AnimationOffset Property
AnimationDelay Property
AnimationBackground Property
AnimationDisposalMethod Property
AnimationGlobalSize Property
AnimationGlobalBackground Property
RasterImageAnimator Class
Implementing Animation