Tipp 0128 Animierte GIF-Dateien abspielen
Autor/Einsender:
Datum:
  Klaus D. Raudszus
28.07.2006
Entwicklungsumgebung:   VB.Net 2003
Framework:   1.1
Dier Tipp zeigt, wie animierte GIF-Dateien abgespielt werden können mit Hilfe der Klasse System.Drawing.Imaging.FrameDimension. Die Klasse FrameDimension stellt Eigenschaften bereit, die die Rahmenabmessungen eines Bildes abrufen.
In diesem Fall wird ein eigenes Steuerelement (User-Control = benutzerdefiniertes Steuerelement) zum Anzeigen animierter GIF-Dateien mit Zeitsteuerung entwickelt, das es sehr einfach macht, eine animierte GIF-Datei anzubinden und die Bilder "zum Laufen" zu bringen. Das GifPicureBox-Control liegt in der Toolbox der Entwicklungsumgebung, kann neu instanziert werden und der Eigenschaft Image ein Bild zugewiesen werden.
 
Imports FD = System.Drawing.Imaging.FrameDimension

Public Class GifPictureBox
  Inherits Control

  Public Event ActiveFrameNumber(ByVal number As Integer)
  Public WithEvents GifTimer As System.Timers.Timer

  Private m_Image As Image
  Private m_FrameDimension As FD
  Private m_FrameCount As Integer
  Private m_intActiveFrame As Integer

  Public Sub New()
    MyBase.New()
    MyBase.SetStyle( _
      ControlStyles.DoubleBuffer _
        Or ControlStyles.UserPaint _
          Or ControlStyles.AllPaintingInWmPaint _
            Or ControlStyles.SupportsTransparentBackColor _
              Or ControlStyles.ResizeRedraw, True)

    MyBase.BackColor = Color.Transparent
    Me.GifTimer = New System.Timers.Timer
    Me.GifTimer.SynchronizingObject = Me
    Me.GifTimer.Interval = 100
  End Sub

  Protected Overrides ReadOnly Property CreateParams() _
        As CreateParams
    Get
      Dim crparams As CreateParams = MyBase.CreateParams
      crparams.ExStyle = &H20
      Return crparams
    End Get
  End Property

  Protected Overrides ReadOnly Property DefaultSize() As _
        System.Drawing.Size
    Get
      Return New Size(100, 45)
    End Get
  End Property

  Public Overloads Property Size() As Size
    Get
      If Not Me.m_Image Is Nothing Then _
        Return Me.m_Image.Size
    End Get

    Set(ByVal value As Size)
      If Not Me.m_Image Is Nothing Then _
        MyBase.Size = Me.m_Image.Size
    End Set
  End Property

  Public ReadOnly Property FrameCount() As Integer
    Get
      Me.FramesCount()
      Return Me.m_FrameCount
    End Get
  End Property

  Public Property Image() As Image
    Get
      Return Me.m_Image
    End Get

    Set(ByVal Value As Image)
      Me.m_Image = Value
      MyBase.Invalidate()
    End Set
  End Property

  Protected Property ActiveFrame() As Integer
    Get
      Return Me.m_intActiveFrame
    End Get

    Set(ByVal Value As Integer)
      If Value > Me.FrameCount Then Value = 0
      If Value >= 0 And Value <= Me.FrameCount Then
        Me.m_intActiveFrame = Value
        Me.m_Image.SelectActiveFrame(Me.m_FrameDimension, Value)
        RaiseEvent ActiveFrameNumber(Value)
        MyBase.Invalidate()
      End If
    End Set
  End Property

  Private Function FramesCount() As Integer
    If Me.m_Image Is Nothing Then
      Me.m_FrameCount = 0
      Return Me.m_FrameCount
    End If

    Me.m_FrameDimension = New FD(Me.m_Image.FrameDimensionsList(0))
    Me.m_FrameCount = _
          Me.Image.GetFrameCount(Me.m_FrameDimension) - 1
    Return Me.m_FrameCount
  End Function

  Private Sub GifTimer_Elapsed(ByVal sender As Object, ByVal e _
     As System.Timers.ElapsedEventArgs) Handles GifTimer.Elapsed
    Me.ActiveFrame = Me.ActiveFrame + 1
  End Sub

  Protected Overrides Sub OnPaint(ByVal e As _
        System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaint(e)
    If Not Me.m_Image Is Nothing Then
      Dim bmp As New Bitmap(Me.m_Image)
      e.Graphics.DrawImage(bmp, 0, 0, Me.Width, Me.Height)
    End If
  End Sub
End Class
 
Weitere Links zum Thema
Grafik-Animation

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (28,8 kB) Downloads bisher: [ 901 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 22. Januar 2012