Das Bild auf der Tabelle ist Bildtyp IMAGE/PJPEG.Parameter Fehler Anzeige JPEG von Byte-Array
Ich ziehe das BLOB-Bild nach unten, und ich muss es nur entweder in einer Bildbox anzeigen oder ich versuche jetzt eine Bildspalte. Ich glaube jedoch, dass mein Problem darin besteht, dass die Bilder ein JPEG sind. Ich bin mir nicht sicher, wie ich das beheben kann.
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
So wurde das Bild eingefügt.
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)
Und dann wird der Wert auf Insert verwendet wurde reader.ReadByte
Gibt es hier etwas verdirbt es irgendwie, dass ich aus stoppt es angezeigt wird?
UPDATE
So ein Bild nach der Verwendung Ich weiß Werke (versuchte 5 I Werke kennen). Mir wurde gesagt, dass es für diese Zeile/Spalte keine Daten gibt, die den folgenden Code verwenden.
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
Hier MPCS_SLECT_SQL
istPublic 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
Der 'New Bitmap (Speicher)' Code funktioniert für mich mit JPEG-Dateien, sowohl Baseline als auch Progressive. Wenn ich die Daten beschädige (z. B. schreibe Nullen in die ersten 10 Bytes), dann bekomme ich "ArgumentException: Parameter ist nicht gültig.". Also, ich vermute, dass Ihre Bilddaten beschädigt sind, entweder in der Datenbank oder aufgrund wie Sie die Daten laden. – Mark
Hallo Markus, ich dachte, das könnte vielleicht das Problem sein, war mir aber nicht sicher. Ich habe meinen Beitrag aktualisiert, um zu zeigen, wie er hinzugefügt wurde. Vielleicht wirft es etwas Licht? – Lee
Zeige uns mehr von diesem Code. Es sieht nicht so aus, als ob Sie alle Bytes speichern, wenn Sie nur ReadByte verwenden. – LarsTech