Site Search:
Sign in | Join | Help
4Penny.net

VB.NET

Notes, Tricks and Tips on VB.NET

October 2007 - Posts

  • Storing Images in a Database

    Imports System.IO
    Imports System.Configuration
    Imports Microsoft.ApplicationBlocks.Data
    Imports System.Data.SqlClient
    Imports System.Drawing
    
    
    
    Public Class ImageData
    
    
        Dim w As Integer
        Dim h As Integer
        Dim filePath As String
        Dim imgStream As MemoryStream
        Dim pid As Integer
    
    
        Dim AbortCallBack As System.Drawing.Image.GetThumbnailImageAbort
    
    
     
    
    
    
        Public Property ImageStream() As MemoryStream
            Get
                Return imgStream
            End Get
            Set(ByVal value As MemoryStream)
                imgStream = value
            End Set
        End Property
    
    
        Public ReadOnly Property Exists() As Boolean
            Get
                If imgStream Is Nothing Then
                    Return False
                Else
                    Return True
                End If
            End Get
        End Property
    
    
        Public Property Image() As System.Drawing.Image
            Get
                Return System.Drawing.Image.FromStream(imgStream)
            End Get
            Set(ByVal value As System.Drawing.Image)
                value.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png)
            End Set
        End Property
    
    
        Public ReadOnly Property Thumbnail() As System.Drawing.Image
            Get
                Dim img As Image = Image
    
    
                If img.Width > 150 Or img.Height > 300 Then
    
    
                    Dim widthRatio As Double = CType(img.Width, Double) / CType(150, Double)
                    Dim heightRatio As Double = CType(img.Height, Double) / CType(200, Double)
                    Dim ratio As Double = Math.Max(widthRatio, heightRatio)
    
    
                    Dim w As Integer = CType(CType(img.Width, Double) / ratio, Integer)
                    Dim h As Integer = CType(CType(img.Height, Double) / ratio, Integer)
    
    
                    Dim thumbNailImg As System.Drawing.Image
                    thumbNailImg = img.GetThumbnailImage(w, h, AbortCallBack, IntPtr.Zero)
    
    
                    Return thumbNailImg
                Else
                    Return img
                End If
    
    
    
            End Get
        End Property
    
    
        Private Sub New()
    
    
        End Sub
    
    
        Function ThumbnailAbortCallback() As Boolean
            Return False
        End Function
    
    
    
        Public Sub New(ByVal s As String, ByVal intPersonIDFK As Integer)
    
    
            AbortCallBack = New System.Drawing.Image.GetThumbnailImageAbort(AddressOf ThumbnailAbortCallback)
    
    
            Dim img As System.Drawing.Image
            img = Image.FromFile(s)
    
    
            imgStream = New MemoryStream()
    
    
            
    
    
            img.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png)
    
    
            If (imgStream.Length / 1000) > 100 Then
                Throw New ImageSizeException()
            End If
    
    
            pid = intPersonIDFK
        End Sub
    
    
        Public Sub New(ByVal s As MemoryStream, ByVal intPersonIDFK As Integer)
            imgStream = s
            pid = intPersonIDFK
        End Sub
    
    
        Public Sub New(ByVal intPersonIFDK As Integer)
            imgStream = ImageData.getImage(intPersonIFDK)
        End Sub
    
    
    
        Public Sub save()
    
    
            SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings("IronMan").ConnectionString, _
                                      Data.CommandType.StoredProcedure, _
                                      "_4P_Person_UpdatePhoto", _
                                      New SqlParameter("@imgPhoto", imgStream.GetBuffer()), _
                                      New SqlParameter("@intRowID", pid))
        End Sub
    
    
        Public Shared Function getImage(ByVal intPersonIDFK As Integer) As MemoryStream
            Dim ds As System.Data.DataSet = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings("IronMan").ConnectionString, _
                                      Data.CommandType.StoredProcedure, _
                                      "_4P_Person_GetPhoto", _
                                      New SqlParameter("@intRowID", intPersonIDFK))
    
    
            Dim ms As MemoryStream
            Try
                ms = New MemoryStream(CType(ds.Tables(0).Rows(0)(0), Byte()))
            Catch ex As Exception
                Return Nothing
            End Try
    
    
    
            Return ms
    
    
        End Function
    
    
        Public Shared Sub clearImage(ByVal intPersonIDFK As Integer)
    
    
            SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings("IronMan").ConnectionString, _
                                      Data.CommandType.StoredProcedure, _
                                      "_4P_Person_UpdatePhoto", _
                                      New SqlParameter("@imgPhoto", Nothing), _
                                      New SqlParameter("@intRowID", intPersonIDFK))
    
    
        End Sub
    
    
        Public Class ImageSizeException
            Inherits Exception
    
    
        End Class
    
    
    End Class