05-10-12, 03:39 PM
في الموضوع أعلاه الكلاس به جزء لم يكتمل وتحديدا في Constructor الخاص بالكلاس ولذلك هذا هو الشكل النهائي للكلاس كالأتي
أيضا من الممكن أن نقوم باستخدام IDisposable Interface مع هذا الكلاس
أيضا من الممكن أن نقوم باستخدام IDisposable Interface مع هذا الكلاس
كود :
Imports System.Drawing.Imaging
Public Class GifImageFrames
#Region " Fields "
Private _frames As Integer
Private _image As Bitmap
#End Region
#Region " Constructor "
Public Sub New()
Me._image = Nothing
Me._frames = 0
End Sub
Public Sub New(ByVal image As Image)
Me._frames = 0
Me._image = image
End Sub
Public Sub New(ByVal frames As Integer, ByVal image As Bitmap)
Me._image = image
Me._frames = frames
End Sub
#End Region
#Region " Properties "
Public ReadOnly Property IsGif As Boolean
Get
If Me._image IsNot Nothing Then
Return Me.IsGifImage(Me._image)
End If
Return Nothing
End Get
End Property
Public ReadOnly Property Image As Bitmap
Get
Return Me._image
End Get
End Property
Public ReadOnly Property Frames As Integer
Get
If Me._image IsNot Nothing Then
Return Me.GetImageFrames(Me._image)
End If
Return 0
End Get
End Property
Public ReadOnly Property Images As List(Of Bitmap)
Get
Return GetImages()
End Get
End Property
#End Region
#Region " Methods "
Private Function GetImageFrames(ByVal img As Image) As Integer
If IsGifImage(img) Then
Dim fDimensions As FrameDimension = New FrameDimension(img.FrameDimensionsList(0))
Dim frames As Integer = img.GetFrameCount(fDimensions)
Return frames
End If
Return 0
End Function
Private Function IsGifImage(ByVal img As Image) As Boolean
If (img Is Nothing) Then
Throw New ArgumentNullException("img")
End If
Dim fDimensions As FrameDimension = New FrameDimension(img.FrameDimensionsList(0))
Dim frames As Integer = img.GetFrameCount(fDimensions)
Dim isGif As Boolean = False
If frames > 1 Then
isGif = True
End If
Return isGif
End Function
Private Function GetImages() As List(Of Bitmap)
If Me._image IsNot Nothing Then
Dim images As New List(Of Bitmap)
Dim gifImage As Image = Me._image
Dim frames As GifImageFrames() = New GifImageFrames() {}
Dim fd As New FrameDimension(gifImage.FrameDimensionsList(0))
Dim frameCount As Integer = gifImage.GetFrameCount(fd)
If frameCount > 1 Then
frames = New GifImageFrames(frameCount - 1) {}
Dim times As Byte() = gifImage.GetPropertyItem(&H5100).Value
For i As Integer = 0 To frameCount - 1
gifImage.SelectActiveFrame(fd, i)
Dim length As Integer = BitConverter.ToInt32(times, 4 * i) * 10
frames(i) = New GifImageFrames(length, New Bitmap(gifImage))
Next
End If
For Each frm As GifImageFrames In frames
images.Add(frm.Image)
Next
Return images
End If
Return Nothing
End Function
#End Region
End Class ' GifImageFrames