![]() |
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
|
|
|
|
|
Windows-Version |
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
|
Download (28,8 kB)
|
Downloads bisher: [ 1041 ]
|
|
|