Hey Leute, ich habe euch gerade ein Snippet geschrieben mit dem Ihr Aus einem Bild mit mehreren Frames ein Frame auslesen könnt.
bsp. Bild:
Daraus wird z.B.:
Eigenschaften:
->FrameSize As Size - Größe einer Frame
->Source As Image - Das Quellbild aus dem die Frames genommen werden
Funktionen:
->GetFramesCount() As Integer - Gibt die Anzahl der Frames zurück
->GetFrame(ByVal FrameIndex As Integer) As Image - Gibt ein Frame anhand des Index zurück
Code der FrameLoader Klasse:
Benutzung:
Einzelne Frames:
Animiert(Mit Timer):
Download:
developer-heaven.bplaced.net/w…s/2012/10/FrameLoader.zip
Ich hoffe ihr könnt den Schnippsel gebrauchen^^
Gruß,
Julian
bsp. Bild:
Daraus wird z.B.:
Eigenschaften:
->FrameSize As Size - Größe einer Frame
->Source As Image - Das Quellbild aus dem die Frames genommen werden
Funktionen:
->GetFramesCount() As Integer - Gibt die Anzahl der Frames zurück
->GetFrame(ByVal FrameIndex As Integer) As Image - Gibt ein Frame anhand des Index zurück
Code der FrameLoader Klasse:
VB.NET-Quellcode
- Public Class FrameLoader
- Dim iFrameSize As Size
- Dim iSource As Image
- ''' <summary>
- ''' Initialisiert einen neuen FrameLoader.
- ''' </summary>
- ''' <param name="Source">Das Quellbild mit den Frames.</param>
- ''' <param name="FrameSize">Die größe eines Frames.</param>
- ''' <remarks></remarks>
- Sub New(ByVal Source As Image, ByVal FrameSize As Size)
- iSource = Source
- iFrameSize = FrameSize
- End Sub
- ''' <summary>
- ''' Gibt ein Frame als Image zurück.
- ''' </summary>
- ''' <param name="FrameIndex">Index des Frames.</param>
- ''' <returns>Frame als Image.</returns>
- ''' <remarks></remarks>
- Public Function GetFrame(ByVal FrameIndex As Integer) As Image
- Dim BMP As New Bitmap(FrameSize.Width, FrameSize.Height)
- Dim G As Graphics = Graphics.FromImage(BMP)
- If (FrameIndex <= GetFramesCount()) Then
- Dim srcRect As Rectangle = New Rectangle(CInt(FrameIndex * (iFrameSize.Width)), 0, FrameSize.Width, FrameSize.Height)
- Dim destRect As Rectangle = New Rectangle(0, 0, iFrameSize.Width, iFrameSize.Height)
- G.DrawImage(Source, destRect, srcRect, Drawing.GraphicsUnit.Pixel)
- End If
- Return BMP
- End Function
- ''' <summary>
- ''' Gibt die Anzahl der Frames zurück.
- ''' </summary>
- ''' <returns>Anzahl der Frames.</returns>
- ''' <remarks></remarks>
- Public Function GetFramesCount() As Integer
- Dim Count As Integer = CInt(Source.Width / iFrameSize.Width)
- Return Count
- End Function
- ''' <summary>
- ''' Ruft die größe der Frames ab, oder legt diese fest.
- ''' </summary>
- ''' <value>Die neue größe der Frames.</value>
- ''' <returns>Gibt die größe der Frames zurück.</returns>
- ''' <remarks></remarks>
- Public Property FrameSize As Size
- Get
- Return iFrameSize
- End Get
- Set(ByVal value As Size)
- iFrameSize = value
- End Set
- End Property
- ''' <summary>
- ''' Ruft das Quellbild ab, oder legt dieses fest.
- ''' </summary>
- ''' <value>Das neue Quellbild.</value>
- ''' <returns>Gibt das Quellbild zurück.</returns>
- ''' <remarks></remarks>
- Public Property Source As Image
- Get
- Return iSource
- End Get
- Set(ByVal value As Image)
- iSource = value
- End Set
- End Property
- End Class
Benutzung:
Einzelne Frames:
Animiert(Mit Timer):
VB.NET-Quellcode
- Public Class Form1
- Dim FL As New FrameLoader(My.Resources.frames, New Size(32, 32))
- Dim CurrentFrame As Integer = 0
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- PictureBox1.Image = FL.GetFrame(CurrentFrame)
- If CurrentFrame = FL.GetFramesCount - 1 Then
- CurrentFrame = 0
- Else
- CurrentFrame += 1
- End If
- End Sub
- End Class
Download:
developer-heaven.bplaced.net/w…s/2012/10/FrameLoader.zip
Ich hoffe ihr könnt den Schnippsel gebrauchen^^
Gruß,
Julian