无法转换类型&System; System.Byte'输入' System.Byte []' - vb .net

时间:2017-01-07 18:23:13

标签: .net arrays vb.net byte

所以我有一个函数应该将图像转换为byte(),然后返回string。但是,我遇到了一些问题。 这是功能:

Shared Function saveSknI(ByVal tosave As Image) As String
    Dim converter As New ImageConverter
    Dim returnValue As String = ""
    For Each imageByte As Byte() In converter.ConvertTo(tosave, GetType(Byte()))
        returnValue = returnValue & Convert.ToBase64String(imageByte)
    Next
    Return returnValue
End Function

此函数返回一个System.InvalidCastException异常。 它看起来像这样:

  

未处理的类型' System.InvalidCastException'发生在***。exe

     

其他信息:无法投射类型' System.Byte'输入' System.Byte []'。

我正在使用vb .net并且我不知道为什么这不起作用,我已经扫描整个项目只是byte而不是byte()它没有想出任何东西。

1 个答案:

答案 0 :(得分:2)

您的方法声明为字符串:

Shared Function saveSknI(ByVal tosave As Image) As String

所以它不能/不会返回一个字节数组。此外,图像转换器不会逐字节转换。这行不会为我编译(使用Option Strict):

For Each imageByte As Byte() In converter.ConvertTo(tosave, GetType(Byte()))

至少,我认为你的意思是For Each imageByte As Byte,因为只有一个数组。此外,ConvertTo会返回您尚未转换但正在尝试迭代的Object。您也不需要逐字节转换为Base64。已更正并已折叠:

Shared Function saveSknI(tosave As Image) As String
    Dim converter As New ImageConverter

    Dim bytes = DirectCast(converter.ConvertTo(tosave, GetType(Byte())), Byte())
    Return Convert.ToBase64String(bytes)
End Function

这与没有拳击的ImageConverter几乎完全相同:

Public Function ToByteArray(img As Image, imgFormat As ImageFormat) As Byte()
    Dim tmpData As Byte()
    Using ms As New MemoryStream()
        img.Save(ms, imgFormat)
        tmpData = ms.ToArray
    End Using
    Return tmpData
End Function

在其上轻拍<Extension()>并将其放在模块中,您可以将其用作扩展程序:

imgBytes = myImg.ToByteArray(ImageFormat.PNG)

将结果转换为Base64:

imgB64 = Convert.ToBase64String(imgBytes)

如果您愿意,可以创建一个ToBase64String()扩展程序,然后一步完成转换。