【问题标题】:DirectCast MySQL BLOB to a PictureBoxDirectCast MySQL BLOB 到 PictureBox
【发布时间】:2016-09-16 07:07:00
【问题描述】:
frmSingleRecord.picImage.Image = DirectCast(sdr("photo_index"), Image)

此代码来自我的MysqlDataReaderphoto_index 是我的数据库 中的Blob。我从这段代码中得到了错误。

无法将“System.Byte[]”类型的对象转换为类型 'System.Drawing.Image'。

如果可以DirectCast Blob 到 PictureBox,我该怎么做?如果没有任何建议会很棒!

【问题讨论】:

  • 不,不是,CType 也不可能。
  • CType 怎么办?
  • 首先,您甚至没有尝试将任何内容转换为PictureBox。您正在尝试将Byte 数组转换为Image,然后可以在PictureBox 中显示。至于铸造,你不能把某物铸造成它不是的东西。转换的想法是您更改访问对象的引用类型,而不是您正在引用的对象的类型。如果某物不是Image,则不能将其转换为Image。你有没有听过“以不同的方式投射一些东西”这个表达?这与我们在编程中使用的“演员”相同。
  • @jmcilhinney 注明(y)

标签: mysql .net vb.net


【解决方案1】:

如前所述,您不能将字节数组转换为作为 UI 控件的 PictureBox,但您可以将二进制 BLOB 转换为 Byte(),以便从中创建图像。假设您确实将Image 保存为Byte() 到数据库:

...
If rdr.Read() Then
    buff = TryCast(rdr.Item(1), Byte())
    If buff IsNot Nothing Then
        Using ms As New MemoryStream(buff)
            pBox.Image = Image.FromStream(ms)
        End Using
    End If
End If

首先,TryCast 尝试将字段数据转换为 Byte() 以避免出现异常,如果只有某些行具有它们的图像数据,则可能发生异常。如果演员表成功,则使用MemoryStreamByte() 创建图像并分配给PictureBox.Image 属性。这可能与您将数据导入数据库的方式相反。

请注意,您已经创建了一个新的Image,因此您也可以在完成后处理它。

【讨论】:

    猜你喜欢
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2017-08-16
    • 2012-11-12
    • 2015-05-25
    • 2015-12-23
    相关资源
    最近更新 更多