Allgemein Kostenlose Downloads OpenSource Projekte Visual Basic.NET Visual Basic.NET - Snippets

[VB.NET][Snippet] FrameLoader / Animierte Bilder

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:

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:

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:

Dim FL As New FrameLoader(My.Resources.frames, New Size(32, 32))
PictureBox1.Image = FL.GetFrame(FRAME_INDEX_INT)

Animiert(Mit Timer):

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:
FrameLoader.zip

Ich hoffe ihr könnt den Schnippsel gebrauchen^^
Gruß,
Julian


390x gelesen

Print Friendly, PDF & Email

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.