2011-10-05 138 views
0

以下是我用於在VB數據庫(SQL Server 2008 R2)中使用VB 2010存儲圖像的代碼。 圖像被存儲,但問題在於檢索時圖像的清晰度丟失並在一個圖片框中看到。在數據庫中存儲和檢索圖像

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

我認爲你需要包括你是如何獲取的圖像,並顯示它的一些詳細信息。 –

回答

1

你image.save()降低了圖像的質量(如果保存爲JPEG)至aabout 75%默認壓縮級別。

請參閱上增加這一質量水平,當你調用保存通過傳遞myEncoderParameters,在更高的層次包含質量水平(比如90%)

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

這個MSDN文章或請參閱(未經測試)代碼的下方,是應該做的伎倆

' 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) 
相關問題