VB преобразовать изображение из двоичного файла в изображение, ошибка параметра - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть столбец, в котором хранится изображение в базе данных MS Access. В этом столбце я щелкаю его правой кнопкой мыши и вставляю объект, который является картинкой из файла. и он сказал "пакет" в столбце.

Идея состоит в том, чтобы загрузить изображение в столбец «pic» в базе данных доступа из файла, и с помощью запроса адаптера таблицы «querypic» с параметром «comboname.text» выбирается, чтобы вернуть изображение и сохранить его как двоичный файл в байтах массива.

но когда я конвертирую его в изображение, я получаю ошибку

System.ArgumentException: 'Параметр недействителен.

Я проверил свой b (), который является массивом байтов, и он получил результат {length = 40276} кто-нибудь может мне помочь?

Private Sub cmdSelect_Click(sender As Object, e As EventArgs) Handles cmdSelect.Click
        Dim facultytabeladapt As New CSE_DEPTDataSetTableAdapters.FacultyTableAdapter
        Dim b() As Byte
        Dim s As String
        b = facultytabeladapt.querypic(ComboName.Text)

        PhotoBox.Image = b21(b)


    End Sub
    Private Function b21(ByVal b() As Byte) As Image

        Dim imgc As New ImageConverter

        Dim imgpic As Image = CType(imgc.ConvertFrom(b), Image) 'it has error "System.ArgumentException: 'Parameter is not valid."
        Return imgpic
    End Function

это, вероятно, из-за объекта OLEDB на рис., Который я загружаю напрямую для доступа, а не двоичного файла RAW

Edit: querypic это

SELECT        pic
FROM            Faculty
WHERE        (faculty_name = ?)

где faculty_name является comboname.text

1 Ответ

0 голосов
/ 07 сентября 2018

Если у вас уже есть байтовый массив, создайте поток памяти из байтового массива, а затем создайте изображение из потока. Не забудьте добавить Import System.IO, чтобы использовать MemoryStream class.

Private Function b21(ByVal b() As Byte) As Image

    Dim ms As New MemoryStream(b) ' create memory stream from byte array
    Return Image.FromStream(ms) ' create image from memory stream

End Function

Полный код:

Imports System.IO
Imports System.Drawing.Imaging

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim b() As Byte
        b = ReadImage(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) & "\test.png")
        PhotoBox.Image = b21(b)

    End Sub

    Private Function b21(ByVal b() As Byte) As Image

        Dim ms As New MemoryStream(b) ' create memory stream from byte array
        Return Image.FromStream(ms) ' create image from memory stream

    End Function

    ''' <summary>
    ''' This function reads a file and returns a byte array
    ''' </summary>
    ''' <param name="file">A file in full path name</param>
    ''' <returns>A byte array of the image</returns>
    Private Function ReadImage(file As String) As Byte()

        Dim image As Image = Image.FromFile(file) ' read image from file
        Dim ms As New MemoryStream ' prepare a memory stream
        image.Save(ms, ImageFormat.Png) ' save the image into memory stream
        Return ms.ToArray() ' return byte array

    End Function

End Class
...