字节转换回图像

Nic*_*ick 1 vb.net byte bytearray type-conversion

我正在尝试将 plr.PlayerImage 中的字节转换回图片框的图像。

但是,方法 1 在 plr.PlayerImage 上返回错误“Byte 类型的值无法转换为 Byte 的一维数组”。

方法 2 提供错误消息“从 Byte() 类型转换为 Byte 类型无效”。

方法 1 在我从数据库中检索数据的单独子程序中使用时有效,但不适用于我的新子程序:

Dim pictureData As Byte() = DirectCast(drResult("PlayerImage"), Byte())

                            Dim picture As Image = Nothing

                            'Create a stream in memory containing the bytes that comprise the image.
                            Using stream As New IO.MemoryStream(pictureData)
                                'Read the stream and create an Image object from the data.'
                                picture = Image.FromStream(stream)
                            End Using

                            UC_Menu_Scout1.PictureBox1.Image = picture
Run Code Online (Sandbox Code Playgroud)

当前代码:

Private Sub fillPlayerInfo()

            For Each plr As Player In getAllPlayers()

                If lbPlayers.SelectedItem.PlayerID = plr.PlayerID Then

                    txtFirstName.Text = plr.PlayerFirstName
                    txtSurname.Text = plr.PlayerLastName
                    txtPlaceOfBirth.Text = plr.PlaceOfBirth
                    cmbClub.SelectedValue = plr.ClubID
                    dtpDOB.Value = plr.DOB

                    '**********Method 1*********************************************
                    Dim pictureData As Byte() = DirectCast(plr.PlayerImage, Byte())
                    Dim picture As Image = Nothing

                    'Create a stream in memory containing the bytes that comprise the image.
                    Using stream As New IO.MemoryStream(pictureData)
                        'Read the stream and create an Image object from the data.
                        picture = Image.FromStream(stream)
                    End Using

                    '**********Method 2*********************************************
                    Dim ms As New IO.MemoryStream(plr.PlayerImage)
                    Dim returnImage As Image = Image.FromStream(ms)

                    pcbEditPlayer.Image = returnImage

                End If
            Next

        End Sub
Run Code Online (Sandbox Code Playgroud)

Çöđ*_*xěŕ 5

正如我在上面的评论中所说,您没有在您创建的内存流中投射您的财产。此外,如果plr.PlayerImage未定义为Byte()您将收到异常。

这就是它的样子......

 Public Property PlayerImage As Byte()
Run Code Online (Sandbox Code Playgroud)

这是您目前拥有的...

  Dim ms As New IO.MemoryStream(plr.PlayerImage) 'This is wrong...
  Dim returnImage As Image = Image.FromStream(ms)
  pcbEditPlayer.Image = returnImage
Run Code Online (Sandbox Code Playgroud)

它应该像...

 Dim ms As New IO.MemoryStream(CType(plr.PlayerImage, Byte())) 'This is correct...
 Dim returnImage As Image = Image.FromStream(ms)
 pcbEditPlayer.Image = returnImage
Run Code Online (Sandbox Code Playgroud)