Picture FrameLoader/Animierte Bilder

    • VB.NET

      Picture 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:


      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

      1. Public Class FrameLoader
      2. Dim iFrameSize As Size
      3. Dim iSource As Image
      4. ''' <summary>
      5. ''' Initialisiert einen neuen FrameLoader.
      6. ''' </summary>
      7. ''' <param name="Source">Das Quellbild mit den Frames.</param>
      8. ''' <param name="FrameSize">Die größe eines Frames.</param>
      9. ''' <remarks></remarks>
      10. Sub New(ByVal Source As Image, ByVal FrameSize As Size)
      11. iSource = Source
      12. iFrameSize = FrameSize
      13. End Sub
      14. ''' <summary>
      15. ''' Gibt ein Frame als Image zurück.
      16. ''' </summary>
      17. ''' <param name="FrameIndex">Index des Frames.</param>
      18. ''' <returns>Frame als Image.</returns>
      19. ''' <remarks></remarks>
      20. Public Function GetFrame(ByVal FrameIndex As Integer) As Image
      21. Dim BMP As New Bitmap(FrameSize.Width, FrameSize.Height)
      22. Dim G As Graphics = Graphics.FromImage(BMP)
      23. If (FrameIndex <= GetFramesCount()) Then
      24. Dim srcRect As Rectangle = New Rectangle(CInt(FrameIndex * (iFrameSize.Width)), 0, FrameSize.Width, FrameSize.Height)
      25. Dim destRect As Rectangle = New Rectangle(0, 0, iFrameSize.Width, iFrameSize.Height)
      26. G.DrawImage(Source, destRect, srcRect, Drawing.GraphicsUnit.Pixel)
      27. End If
      28. Return BMP
      29. End Function
      30. ''' <summary>
      31. ''' Gibt die Anzahl der Frames zurück.
      32. ''' </summary>
      33. ''' <returns>Anzahl der Frames.</returns>
      34. ''' <remarks></remarks>
      35. Public Function GetFramesCount() As Integer
      36. Dim Count As Integer = CInt(Source.Width / iFrameSize.Width)
      37. Return Count
      38. End Function
      39. ''' <summary>
      40. ''' Ruft die größe der Frames ab, oder legt diese fest.
      41. ''' </summary>
      42. ''' <value>Die neue größe der Frames.</value>
      43. ''' <returns>Gibt die größe der Frames zurück.</returns>
      44. ''' <remarks></remarks>
      45. Public Property FrameSize As Size
      46. Get
      47. Return iFrameSize
      48. End Get
      49. Set(ByVal value As Size)
      50. iFrameSize = value
      51. End Set
      52. End Property
      53. ''' <summary>
      54. ''' Ruft das Quellbild ab, oder legt dieses fest.
      55. ''' </summary>
      56. ''' <value>Das neue Quellbild.</value>
      57. ''' <returns>Gibt das Quellbild zurück.</returns>
      58. ''' <remarks></remarks>
      59. Public Property Source As Image
      60. Get
      61. Return iSource
      62. End Get
      63. Set(ByVal value As Image)
      64. iSource = value
      65. End Set
      66. End Property
      67. End Class


      Benutzung:
      Einzelne Frames:

      VB.NET-Quellcode

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


      Animiert(Mit Timer):

      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim FL As New FrameLoader(My.Resources.frames, New Size(32, 32))
      3. Dim CurrentFrame As Integer = 0
      4. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
      5. PictureBox1.Image = FL.GetFrame(CurrentFrame)
      6. If CurrentFrame = FL.GetFramesCount - 1 Then
      7. CurrentFrame = 0
      8. Else
      9. CurrentFrame += 1
      10. End If
      11. End Sub
      12. End Class


      Download:
      developer-heaven.bplaced.net/w…s/2012/10/FrameLoader.zip

      Ich hoffe ihr könnt den Schnippsel gebrauchen^^



      Gruß,
      Julian
      Bilder
      • frames.png

        594 Byte, 128×32, 328 mal angesehen