WPF vb.net没有找到适合完成操作的成像组件

时间:2018-02-24 17:36:13

标签: wpf vb.net image byte memorystream

我使用来自我的WPF应用程序的代码将图像插入到.mdb数据库中:

Pic

Long binary data列或单元格的数据类型是OLE对象...无论如何,在插入数据后,我打开了我的数据库,我看到添加了一条新记录,但是 Dim cmd As New OleDbCommand("Select * from recents", con) Dim table As New DataTable Dim adap As New OleDbDataAdapter(cmd) adap.Fill(table) If table.Rows.Count <= 0 Then Else For Each row In table.Rows recentbtn.Image.ImageSource = BytesToImage(CType(row(1), Byte())) recentbtn.Names.Text = table.Rows(0)(0).ToString AddHandler recentbtn.MouseDown, AddressOf recentbtn_mousedow RecentsList.stp.Children.Add(recentbtn) Next End If loadingrecents.Visibility = Visibility.Hidden End Sub Private Shared Function BytesToImage(ByVal bytes As Byte()) As BitmapImage Dim bm = New BitmapImage() Using stream As MemoryStream = New MemoryStream(bytes) stream.Position = 0 stream.Seek(0, SeekOrigin.Begin) bm.BeginInit() bm.StreamSource = stream bm.CreateOptions = BitmapCreateOptions.PreservePixelFormat bm.CacheOption = BitmapCacheOption.OnLoad bm.EndInit() End Using Return bm End Function 的值列是{{1}}。无论如何,我继续在我的wpf应用程序中检索图像。我使用了这段代码?

{{1}}

但是它返回了一个错误:找不到适合完成操作的成像组件

1 个答案:

答案 0 :(得分:0)

修正了......对于将来遇到此错误的任何人:

  1. 确保以正确的方式插入数据(有时数据库中的数据损坏会导致此类错误)
  2. 2。您不需要做一些繁重的编码就可以将图像转换为字节!

    最后,让我们的代码:

       Public Sub read()
        con.Open()
        Dim cmd As New OleDbCommand("Select * from recents", con)
        Dim _dr As OleDbDataReader
        _dr = cmd.ExecuteReader
        Dim _photo As Byte()
        While _dr.Read()
                Try
                _photo = CType(_dr(1), Byte())
                Dim strm As MemoryStream = New MemoryStream(_photo)
                    Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(strm)
                    Dim bi As BitmapImage = New BitmapImage()
                    bi.BeginInit()
                    Dim ms As MemoryStream = New MemoryStream()
                    img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
                    ms.Seek(0, SeekOrigin.Begin)
                    bi.StreamSource = ms
                    bi.EndInit()
                image1.Source = bi
            Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
        End While