Хранение и извлечение изображений в базе данных

#vb.net #visual-studio-2010 #image #sql-server-2008

#vb.net #visual-studio-2010 #изображение #sql-server-2008

Вопрос:

Вот код, который я использовал для хранения изображения в моей базе данных (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
  

Комментарии:

1. Я думаю, вам нужно включить дополнительную информацию о том, как вы извлекаете изображение и отображаете его.

Ответ №1:

Функция image.save() снижает качество изображения (если оно сохранено в формате Jpeg) до уровня сжатия по умолчанию, составляющего около 75%.

Пожалуйста, ознакомьтесь с этой статьей MSDN о повышении этого уровня качества, когда вы вызываете Save, передавая myEncoderParameters, содержащий уровень качества на гораздо более высоком уровне (скажем, 90%)

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

Или посмотрите (непроверенный) код ниже, это должно сработать

     ' 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)