所以我有一个函数应该将图像转换为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()
它没有想出任何东西。
答案 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()
扩展程序,然后一步完成转换。