Leadtools Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
Append Method
See Also  Example
Leadtools Namespace > RasterImageAnimator Class : Append Method



image
A RasterImage that contains 1 or more frames to be added to the animation.
Appends an image to the animated multi-frame image during an animation playback.

Syntax

Visual Basic (Declaration)  
Public Sub Append( _
   ByVal image As RasterImage _
) 
Visual Basic (Usage) Copy Code
Dim instance As RasterImageAnimator
Dim image As RasterImage
 
instance.Append(image)
C#  
public void Append( 
   RasterImage image
)
C++/CLI  
public:
void Append( 
   RasterImage^ image
) 

Parameters

image
A RasterImage that contains 1 or more frames to be added to the animation.

Example

This example plays an animated GIF file as it loads the file

Visual Basic Copy Code
Private _animator As RasterImageAnimator
Private _targetImage As RasterImage
Private _graphics As Graphics
Private _destRect As Rectangle
Private _paintProperties As RasterPaintProperties
Sub RasterImageAppendExample(ByVal panel As Panel)
   ' Initialize the RasterCodecs object
   RasterCodecs.Startup()
   Dim codecs As New RasterCodecs()

   ' An animated GIF file
   Dim fileName As String = LeadtoolsExamples.Common.ImagesPath.Path + "Eye.gif"

   ' load the first frame, so we have the palette and a target image for playback
   _targetImage = codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1)

   ' Create the animator
   _animator = New RasterImageAnimator(_targetImage, Nothing)

   ' Setup our class members used in the event handler
   _graphics = panel.CreateGraphics()
   _destRect = panel.ClientRectangle
   _paintProperties = RasterPaintProperties.Default
   _paintProperties.PaintEngine = RasterPaintEngine.GdiPlus

   ' Hook to the LoadImage event and load the file
   AddHandler codecs.LoadImage, AddressOf codecs_LoadImage
   codecs.Load(fileName)
   RemoveHandler codecs.LoadImage, AddressOf codecs_LoadImage

   _graphics.Dispose()
   _animator.Dispose()
   _animator = Nothing

   _targetImage.Dispose()

   codecs.Dispose()
   RasterCodecs.Shutdown()
End Sub

Sub codecs_LoadImage(ByVal sender As Object, ByVal e As CodecsLoadImageEventArgs)
   If ((e.Flags And CodecsLoadImageFlags.FirstRow) = CodecsLoadImageFlags.FirstRow) Then
      _animator.Append(e.Image)
   End If

   _animator.ValidateLines(e.Row, e.Lines)

   Dim state As RasterImageAnimatorState = _animator.State

   Do While (state <> RasterImageAnimatorState.End)
      state = _animator.Process()

      Dim updateRect As Rectangle

      Select Case (state)
         Case RasterImageAnimatorState.WaitInput
            _animator.CancelWait()

         Case RasterImageAnimatorState.PostClear, _
            RasterImageAnimatorState.PostRender
            updateRect = _animator.GetUpdateRectangle(True)
            _targetImage.Paint(_graphics, Rectangle.Empty, updateRect, _destRect, Rectangle.Empty, _paintProperties)
      End Select

      Exit Do
   Loop
End Sub
C# Copy Code
RasterImageAnimator _animator; 
RasterImage _targetImage; 
Graphics _graphics; 
Rectangle _destRect; 
RasterPaintProperties _paintProperties; 
 
void RasterImageAppendExample(Panel panel) 

   // Initialize the RasterCodecs object 
   RasterCodecs.Startup(); 
   RasterCodecs codecs = new RasterCodecs(); 
 
   // An animated GIF file 
   string fileName = LeadtoolsExamples.Common.ImagesPath.Path + "Eye.gif"; 
 
   // load the first frame, so we have the palette and a target image for playback 
   _targetImage = codecs.Load(fileName, 0, CodecsLoadByteOrder.BgrOrGray, 1, 1); 
 
   // Create the animator 
   _animator = new RasterImageAnimator(_targetImage, null); 
 
   // Setup our class members used in the event handler 
   _graphics = panel.CreateGraphics(); 
   _destRect = panel.ClientRectangle; 
   _paintProperties = RasterPaintProperties.Default; 
   _paintProperties.PaintEngine = RasterPaintEngine.GdiPlus; 
 
   // Hook to the LoadImage event and load the file 
   codecs.LoadImage += new EventHandler<CodecsLoadImageEventArgs>(codecs_LoadImage); 
   codecs.Load(fileName); 
   codecs.LoadImage -= new EventHandler<CodecsLoadImageEventArgs>(codecs_LoadImage); 
 
   _graphics.Dispose(); 
   _animator.Dispose(); 
   _animator = null; 
 
   _targetImage.Dispose(); 
 
   codecs.Dispose(); 
   RasterCodecs.Shutdown(); 

 
void codecs_LoadImage(object sender, CodecsLoadImageEventArgs e) 

   if((e.Flags & CodecsLoadImageFlags.FirstRow) == CodecsLoadImageFlags.FirstRow) 
      _animator.Append(e.Image); 
 
   _animator.ValidateLines(e.Row, e.Lines); 
 
   RasterImageAnimatorState state = _animator.State; 
 
   while(state != RasterImageAnimatorState.End) 
   { 
      state = _animator.Process(); 
 
      Rectangle updateRect; 
 
      switch(state) 
      { 
         case RasterImageAnimatorState.WaitInput: 
            _animator.CancelWait(); 
            break; 
 
         case RasterImageAnimatorState.PostClear: 
         case RasterImageAnimatorState.PostRender: 
            updateRect = _animator.GetUpdateRectangle(true); 
            _targetImage.Paint(_graphics, Rectangle.Empty, updateRect, _destRect, Rectangle.Empty, _paintProperties); 
            break; 
      } 
 
      break; 
   } 
}

Remarks

If you pass null (Nothing in VisualBasic) in the animatedImage parameter for the RasterImageAnimator constructor, you can use the Append method to add frames to the multi-frame image during the animation. This is useful if you want to play an animated file as it is being loaded using the RasterCodecs.LoadImage event. If you need to reference the multi-frame image after the animation, you can call the Destroy method before you dispose this RasterImageAnimator object.

After you call Destroy, this RasterImageAnimator object is invalid and you should only call the Dispose method afterwards.

The ValidateLines method lets you validate the lines that the animation playback engine will render to the target image

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also