Public Class Changeimage
Private strImagepath As String
Private objNormalimage As Image
Private objThumbnailimage As Image
Private intMaximumImagesize As Integer
Private bolLoadingLargeImageFinished As Boolean
Private bolLoadingThumbnailImageFinished As Boolean
Private thrChangeLargeImgage As New System.Threading.Thread(AddressOf ChangeLargeImage)
Private thrChangethumbnailimage As New System.Threading.Thread(AddressOf ChangeThumbnailImage)
Public Event ThumbnailPictureChanged(ByRef ThumbnailImage As Image)
Public Event Largepicturechanged(ByRef NormalImage As Image, ByVal ImagePath As String)
Public Property ImagePath() As String
Get
Return strImagepath
End Get
Set(ByVal Value As String)
strImagepath = Value
End Set
End Property
Public ReadOnly Property NormalImage() As Image
Get
Return objNormalimage
End Get
End Property
Public ReadOnly Property ThumbnailImage() As Image
Get
Return objThumbnailimage
End Get
End Property
Public Property MaximumImageSize() As Integer
Get
Return intMaximumImagesize
End Get
Set(ByVal Value As Integer)
intMaximumImagesize = Value
End Set
End Property
Public ReadOnly Property LoadingLargImageFinished() As Boolean
Get
Return bolLoadingLargeImageFinished
End Get
End Property
Public ReadOnly Property LoadingThumbnailImageFinished() As Boolean
Get
Return bolLoadingThumbnailImageFinished
End Get
End Property
Public Sub New()
Me.bolLoadingLargeImageFinished = True
Me.bolLoadingThumbnailImageFinished = True
Me.thrChangeLargeImgage = Nothing
Me.thrChangethumbnailimage = Nothing
End Sub
Public Sub ChangeImages(ByVal Imagepath As String, ByVal MaximumImageSize As Integer)
strImagepath = Imagepath
intMaximumImagesize = MaximumImageSize
Me.bolLoadingThumbnailImageFinished = False
Me.bolLoadingLargeImageFinished = False
If Not thrChangeLargeImgage Is Nothing Then
thrChangeLargeImgage.Abort()
End If
If Not Me.thrChangethumbnailimage Is Nothing Then
Me.thrChangethumbnailimage.Abort()
End If
thrChangeLargeImgage = New System.Threading.Thread(AddressOf ChangeLargeImage)
thrChangeLargeImgage.Start()
thrChangethumbnailimage = New System.Threading.Thread(AddressOf ChangeThumbnailImage)
thrChangethumbnailimage.Start()
End Sub
Public Sub ChangeImages()
Me.bolLoadingThumbnailImageFinished = False
Me.bolLoadingLargeImageFinished = False
If Not thrChangeLargeImgage Is Nothing Then
thrChangeLargeImgage.Abort()
End If
If Not Me.thrChangethumbnailimage Is Nothing Then
Me.thrChangethumbnailimage.Abort()
End If
thrChangeLargeImgage = New System.Threading.Thread(AddressOf ChangeLargeImage)
thrChangeLargeImgage.Start()
thrChangethumbnailimage = New System.Threading.Thread(AddressOf ChangeThumbnailImage)
thrChangethumbnailimage.Start()
End Sub
Public Sub RedoThumbnailImage()
Me.bolLoadingThumbnailImageFinished = False
If Not Me.thrChangethumbnailimage Is Nothing Then
Me.thrChangethumbnailimage.Abort()
End If
Me.LoadNonExistingThumbnail()
End Sub
Private Sub ChangeThumbnailImage()
If System.IO.File.Exists(strImagepath) Then
If System.IO.File.Exists((strImagepath.Substring(0, strImagepath.Length - 4)) & "thumb.jpg") Then
Me.LoadExistingThumbnail()
Else
Me.LoadNonExistingThumbnail()
End If
Else
objThumbnailimage = Nothing
RaiseEvent ThumbnailPictureChanged(Nothing)
End If
Me.bolLoadingThumbnailImageFinished = True
Me.thrChangethumbnailimage = Nothing
End Sub
Private Sub LoadExistingThumbnail()
Dim originalimage As Image
Dim newgraphics As Graphics
originalimage = Image.FromFile((strImagepath.Substring(0, strImagepath.Length - 4)) & "thumb.jpg")
objThumbnailimage = New Bitmap(originalimage.Width, originalimage.Height)
newgraphics = Graphics.FromImage(objThumbnailimage)
newgraphics.DrawImage(originalimage, 0, 0, originalimage.Width, originalimage.Height)
originalimage.Dispose()
RaiseEvent ThumbnailPictureChanged(objThumbnailimage)
originalimage = Nothing
newgraphics = Nothing
End Sub
Private Sub LoadNonExistingThumbnail()
Dim mycallback As System.Drawing.Image.GetThumbnailImageAbort = Nothing
Dim picOriginalHeight, picOriginalWidth As Double
Dim picNewHeight, picNewWidth As Double
Dim originalimage As Image
Dim objTempNormalImage As Image
Dim newGraphics As Graphics
originalimage = Image.FromFile(strImagepath)
objTempNormalImage = New Bitmap(originalimage.Width, originalimage.Height)
newGraphics = Graphics.FromImage(objTempNormalImage)
newGraphics.DrawImage(originalimage, 0, 0, originalimage.Width, originalimage.Height)
originalimage.Dispose()
picOriginalHeight = objTempNormalImage.Height
picOriginalWidth = objTempNormalImage.Width
If picOriginalHeight > picOriginalWidth Then
If picOriginalHeight > intMaximumImagesize Then
picNewHeight = intMaximumImagesize
picNewWidth = picOriginalWidth / picOriginalHeight * intMaximumImagesize
Else
picNewHeight = picOriginalHeight
picNewWidth = picOriginalWidth
End If
Else
If picOriginalWidth > intMaximumImagesize Then
picNewWidth = intMaximumImagesize
picNewHeight = picOriginalHeight / picOriginalWidth * intMaximumImagesize
Else
picNewHeight = picOriginalHeight
picNewWidth = picOriginalWidth
End If
End If
objThumbnailimage = objTempNormalImage.GetThumbnailImage(Convert.ToInt32(picNewWidth), Convert.ToInt32(picNewHeight), mycallback, System.IntPtr.Zero)
RaiseEvent ThumbnailPictureChanged(objThumbnailimage)
originalimage = Nothing
objTempNormalImage = Nothing
newGraphics = Nothing
End Sub
Private Sub ChangeLargeImage()
If System.IO.File.Exists(strImagepath) Then
Dim originalimage As Image = Image.FromFile(strImagepath)
objNormalimage = New Bitmap(originalimage.Width, originalimage.Height)
Dim newgraphics As Graphics = Graphics.FromImage(objNormalimage)
newgraphics.DrawImage(originalimage, 0, 0, originalimage.Width, originalimage.Height)
originalimage.Dispose()
RaiseEvent Largepicturechanged(objNormalimage, strImagepath)
Else
RaiseEvent Largepicturechanged(Nothing, "No image available")
End If
thrChangeLargeImgage = Nothing
Me.bolLoadingLargeImageFinished = True
End Sub
End Class