Изображение на столе - это тип изображения IMAGE/PJPEG.Ошибка параметра, отображающая jpeg из массива байтов
Я потянул изображение BLOB вниз, и мне просто нужно отобразить его либо в окне изображения, либо, поскольку я сейчас пытаюсь создать столбец изображений. Однако, я думаю, что моя проблема связана с тем, что изображения являются JPEG. Не знаете, как это исправить.
For i As Integer = DataGridView1.Rows.Count - 1 To 0 Step -1
Dim MTI_Image As Byte()
STSQL = "Select IMAGE from mpcs.image_resource WHERE IMAGE_NAME = '01400010016.jpg'"
rsMPCS = MPCS_SELECT_SQL(UCase(STSQL), rsMPCS)
rsMPCS.Read()
MTI_Image = rsMPCS("IMAGE")
rsMPCS.Close()
Using memory As MemoryStream = New MemoryStream(MTI_Image)
'Dim newImage = Image.FromStream(memory) 'didn't work
Dim newImage As Bitmap = New Bitmap(memory) 'ERROR HERE
Dim ColImage As New DataGridViewImageColumn
Dim Img As New DataGridViewImageCell
DataGridView1.Columns.Add(ColImage)
ColImage.HeaderText = "Image"
ColImage.Name = "ColImg"
Img.Value = newImage
DataGridView1.Rows(0).Cells.Add(Img)
End Using
Next
Так изображение было вставлено.
Dim temp As String = OpenFileDialog1.FileName
Dim FileStream As Stream = System.IO.File.OpenRead((temp))
Dim array() As Byte = File.ReadAllBytes(temp)
Using memory As MemoryStream = New MemoryStream(array)
Using reader As BinaryReader = New BinaryReader(memory)
И то значение, которое используется для вставки reader.ReadByte
Есть ли что-то здесь развращает это как-то, что мешает мне от его отображения?
UPDATE
Так После использования изображения я знаю работу (5 пытавшейся я знаю работу). Мне сказали, что для этого столбца/столбца нет DATA, используя приведенный ниже код.
For i As Integer = DataGridView1.Rows.Count - 1 To 0 Step -1
STSQL = "Select IMAGE from MPCS.IMAGE_RESOURCE WHERE IMAGE_NAME = 'ThermalEtch.JPG'"
rsMPCS = MPCS_SELECT_SQL(UCase(STSQL), rsMPCS)
rsMPCS.Read()
Dim byteImage() As Byte = rsMPCS("IMAGE") 'ERROR HERE.
Using memory As MemoryStream = New MemoryStream(byteImage)
Dim newimage As Bitmap = New Bitmap(memory)
Dim ColImage As New DataGridViewImageColumn
Dim Img As New DataGridViewImageCell
DataGridView1.Columns.Add(ColImage)
ColImage.HeaderText = "Image"
ColImage.Name = "Image"
Img.Value = newimage
DataGridView1.Rows(i).Cells.Add(Img)
End Using
Next
Вот MPCS_SLECT_SQL
Public Function MPCS_SELECT_SQL(ByVal strSQL As String, Optional ByRef readerObj As OleDbDataReader = Nothing) As OleDbDataReader 'ADODB.Recordset
Try
If OPEN_CONNECTIONS() = False Then
MessageBox.Show("Error connecting to database.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop)
MPCS_SELECT_SQL = Nothing
Exit Function
Else
If Not readerObj Is Nothing Then
If readerObj.IsClosed - False Then readerObj.Close()
End If
Dim cmdMPCS As OleDbCommand = New OleDbCommand(strSQL, conMPCS)
MPCS_SELECT_SQL = cmdMPCS.ExecuteReader()
cmdMPCS.Dispose()
End If
Catch ex As Exception
MessageBox.Show(ex.ToString & " " & strSQL)
Stop
Return Nothing
End Try
End Function
Код «Новый битмап (память)» работает для меня с файлами JPEG, как базовыми, так и прогрессивными. Если я повреждаю данные (например, записываю нули в первые 10 байтов), я получаю «ArgumentException: параметр недействителен». Поэтому я подозреваю, что ваши данные изображения повреждены либо в базе данных, либо из-за того, как вы загружаете данные. – Mark
Привет, Марк, я подумал, может быть, это может быть проблемой, но не был уверен. Я обновил свой пост, чтобы показать, как он был добавлен. Может, он проливает свет? – Lee
Лучше покажите нам больше этого кода вставки. Не похоже, что вы сохраняете все байты, если все, что вы делаете, это ReadByte. – LarsTech