2011-10-05 5 views
0

Voici le code que j'ai utilisé pour stocker une image dans ma base de données (SQL Server 2008 R2) en utilisant VB 2010. Les images sont stockées mais le problème est que la clarté de l'image est perdue lors de la récupération et vu dans une boîte d'image.Stockage et récupération d'images dans la base de données

Public Function InsertUpdateImage(ByRef _SqlConnection As System.Data.SqlClient.SqlConnection, ByVal _Image As System.Drawing.Image, ByVal _ImageFormat As System.Drawing.Imaging.ImageFormat) As Integer 
    Dim _SqlRetVal As Integer = 0 
    'System.IO.Path.GetFullPath(files(ListView1.SelectedIndices(0))) Give the path for the 'image from listview 
    Dim str As String = System.IO.Path.GetFullPath(files(ListView1.SelectedIndices(0))) 
    Dim i As Integer = Len(str) 
    Dim j As Integer = 0 
    Dim locstr(i + 10) As Char 
    i = 0 
    While i < Len(str) 
     If str(i) = "\" Then 
      locstr(j) = "\" 
      j = j + 1 
     Else 
      locstr(j) = str(i) 
      j = j + 1 
     End If 
     i = i + 1 
    End While 
    Dim loc As New String(locstr) 
    MsgBox(loc) 

    ' lets add this record to database 
    Dim _SqlCommand As New System.Data.SqlClient.SqlCommand("insert into maindb(photo,name,location) values(@image,'" + System.IO.Path.GetFileName(files(ListView1.SelectedIndices(0))) + "','" + loc + "')", _SqlConnection) 

    ' Convert image to memory stream 
    Dim _MemoryStream As New System.IO.MemoryStream() 
    _Image.Save(_MemoryStream, _ImageFormat) 

    ' Add image as SQL parameter 
    Dim _SqlParameter As New System.Data.SqlClient.SqlParameter("@image", SqlDbType.Image) 
    _SqlParameter.Value = _MemoryStream.ToArray() 

    _SqlCommand.Parameters.Add(_SqlParameter) 

    ' Executes a Transact-SQL statement against the connection 
    ' and returns the number of rows affected. 
    _SqlRetVal = _SqlCommand.ExecuteNonQuery() 
    Console.Write(_SqlRetVal) 
    ' Dispose command 
    _SqlCommand.Dispose() 
    _SqlCommand = Nothing 

    ' Error occurred while trying to execute reader 
    ' send error message to console (change below line to customize error handling) 

    Return _SqlRetVal 
End Function 
+0

Je pense que vous devez inclure plus d'informations sur la façon dont vous récupérez l'image et l'afficher. –

Répondre

1

Votre image.save() réduit la qualité de l'image (si elle est enregistrée au format JPEG) au niveau de compression par défaut de asur 75%.

S'il vous plaît voir cet article MSDN sur l'augmentation de ce niveau de qualité, lorsque vous appelez Enregistrer en passant dans myEncoderParameters, contenant un niveau de qualité à un niveau beaucoup plus élevé (disons 90%)

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoder.quality.aspx

Ou voir le (non testé) code ci-dessous, qui devrait faire l'affaire

' Create a a single encoder parameter envelope 
    Dim EncoderParameters As New EncoderParameters(1) 

    ' Create and add a single quality parameter to this envelope, specifying 95% 
    Dim QualityParam As New EncoderParameter(Encoder.Quality, CType(95L, Int32)) 
    EncoderParameters.Param(0) = QualityParam 

    ' Save the image with the encoder param specifying 95% quality 
    _image.Save(_MemoryStream, _ImageFormat, EncoderParameters) 
Questions connexes