将Access数据库中存储的图片加载到VB.NET程序中

2024-05-13

我有一个通过数据源与 VB 项目链接的 Access 数据库。在其中一个表的数据库中,我有一个 OLE 对象字段。我在此字段中保存了.BMP 格式和.JPG 格式的图片。我遇到的问题是将这张图像加载到我的应用程序中。这就是我希望能够做到的:

ButtonMeal1.BackgroundImage = IPOSDBDataSet.Meals.Rows(0).Item(5)

其中 Item(5) 是存储图像的行的列。

还有另一种方法可以做到这一点吗?我是否必须通过将图片存储为变量来将图片加载到程序中,然后使用它来更改按钮的背景图像。关于我的问题,互联网上没有明确的答案。请帮忙!

编辑1: 经过更多研究后,我找到了一些代码并对其进行了调整以尝试解决我的问题。

Dim ImageByteArray As Byte() = CType(IPOSDBDataSet.Meals.Rows(0).Item(5), Byte())
Dim ImageMemoryStream As MemoryStream = New IO.MemoryStream(ImageByteArray)
Dim MyImage As Image = Drawing.Image.FromStream(ImageMemoryStream)
PictureBox1.Image = MyImage

但是,我在代码的第三行收到错误“参数无效”。有人能告诉我如何调整代码来解决这个问题,或者告诉我我是否做错了什么?

编辑2: 我不断更改代码,但错误始终是“参数无效”。什么参数无效?

编辑3: 无论我将其更改为什么,错误仍然存​​在。导致我所有问题的这个参数是什么?

 Dim ImageByteArray As Byte() = CType(IPOSDBDataSet.Meals.Rows(0).Item(5), Byte())
 Dim ImageMemoryStream As MemoryStream = New IO.MemoryStream(ImageByteArray)
 Dim ImageStream As Stream = ImageMemoryStream
 Dim MyImage As Image = Drawing.Image.FromStream(ImageStream)
 PictureBox1.Image = MyImage

编辑4: 有人可以帮忙吗?我真的需要能够将其实现到我的程序中。是否有其他可能的方法将图像存储在 Access 数据库中并将它们导入到我的 vb.net 程序中?


信用去往TnTinMan http://www.codeproject.com/script/Membership/View.aspx?mid=9863689来自 CodeProject 的答案。希望这对其他人有帮助:

Dim ImageByteArray As Byte() = CType(DataSet.Table.Rows(RowNo).Item(ItemNo), Byte())
Dim ImageMemoryStream As MemoryStream = New IO.MemoryStream(GetImageBytesFromOLEField(ImageByteArray))
Dim MyImage As Image = Drawing.Image.FromStream(ImageMemoryStream)


Friend Shared Function GetImageBytesFromOLEField(ByVal oleFieldBytes() As Byte) As Byte()

   Dim BITMAP_ID_BLOCK As String = "BM"
   Dim JPG_ID_BLOCK As String = ChrW(&HFF).ToString() & ChrW(&HD8).ToString() & ChrW(&HFF).ToString()
   Dim PNG_ID_BLOCK As String = ChrW(&H89).ToString() & "PNG" & vbCrLf & ChrW(&H1A).ToString() & vbLf
   Dim GIF_ID_BLOCK As String = "GIF8"
   Dim TIFF_ID_BLOCK As String = "II*" & ChrW(&H0).ToString()

   Dim imageBytes() As Byte

   ' Get a UTF7 Encoded string version
   Dim u7 As System.Text.Encoding = System.Text.Encoding.UTF7
   Dim strTemp As String = u7.GetString(oleFieldBytes)
   Dim st2 As String = System.Text.Encoding.UTF8.GetString(oleFieldBytes)
   ' Get the first 300 characters from the string
   Dim strVTemp As String = strTemp.Substring(0, 300)

   ' Search for the block
   Dim iPos As Integer = -1
   If strVTemp.IndexOf(BITMAP_ID_BLOCK) <> -1 Then
      iPos = strVTemp.IndexOf(BITMAP_ID_BLOCK)
   ElseIf strVTemp.IndexOf(JPG_ID_BLOCK) <> -1 Then
      iPos = strVTemp.IndexOf(JPG_ID_BLOCK)
   ElseIf strVTemp.IndexOf(PNG_ID_BLOCK) <> -1 Then
      iPos = strVTemp.IndexOf(PNG_ID_BLOCK)
   ElseIf strVTemp.IndexOf(GIF_ID_BLOCK) <> -1 Then
      iPos = strVTemp.IndexOf(GIF_ID_BLOCK)
   ElseIf strVTemp.IndexOf(TIFF_ID_BLOCK) <> -1 Then
      iPos = strVTemp.IndexOf(TIFF_ID_BLOCK)
   Else
      Throw New Exception("Unable to determine header size for the OLE Object")
   End If


   ' From the position above get the new image
   If iPos = -1 Then
   Throw New Exception("Unable to determine header size for the OLE Object")
   End If

   imageBytes = New Byte(CInt(oleFieldBytes.LongLength - iPos - 1)) {}
   Array.ConstrainedCopy(oleFieldBytes, iPos, imageBytes, 0, oleFieldBytes.Length - iPos)

   Return imageBytes

End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将Access数据库中存储的图片加载到VB.NET程序中 的相关文章

  • 使用正则表达式验证器上传文件不适用于仅 Firefox IE

    我有一个带有 RegularExpressionValidator 的 FileUpload 和以下验证表达式 a zA Z 2 w w w gif jpg JPG JPEG GIF jpeg png bmp 3dm 3dmf ai drw
  • 将字符串转换为双精度 - VB

    VB中有没有一种有效的方法来检查字符串是否可以转换为双精度型 我目前正在尝试将字符串转换为双精度型 然后查看它是否引发异常 但这似乎减慢了我的申请速度 Try if number then format it current CDbl x
  • 如何使用 winforms 在 vb.net 中制作大型按钮网格(24x20 或类似)?

    我正在 vb net WinForms 中制作一个座位预订系统 我需要用户能够选择他们想要使用的座位并改变颜色 这样他们就可以知道它已选择 我开始尝试使用按钮 但 480 个按钮严重减慢了表单的加载时间 然后我尝试了在行 列中带有按钮的数据
  • 如何使用 VB.NET 打开受密码保护的共享网络文件夹?

    我需要在网络上打开受密码保护的共享文件夹才能访问 Access 97 数据库 如何打开文件夹并输入密码 在这里找到http www mredkj com vbnet vbnetmapdrive html http www mredkj co
  • 下载需要使用 vb.net/c# 进行身份验证的文件?

    与 CSV 文件类似 可以从以下位置下载http download finance yahoo com d quotes csv s RHT 如何下载需要身份验证的文件 我可以简单地使用 My Computer Network Downlo
  • 在 Visual Basic 中将窗体放置在屏幕右下角

    当表单加载时 如何将表单定位在屏幕的右下角 我正在使用 Visual Basic 2010 Express Thanks 编辑 我这样做了 看起来效果很好 Dim x As Integer Dim y As Integer x Screen
  • 设置表单的背景颜色

    Private Sub HScrollBar1 Scroll ByVal sender As Object ByVal e As ScrollEventArgs Handles HScrollBar1 Scroll Me BackColor
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • 变量替换为字符串

    我可以做类似的事情吗 s said s blah name blah 在 VB NET 中 写字越来越痛苦name said blah blah 在VB NET 14 对于VS2015 中 您可以使用字符串插值 https msdn mic
  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • VB.NET 中的 TextChanged 事件

    我有两个基本文本框 比方说 A 和 B 我希望在一个文本框中输入内容以清除另一个文本框中的任何输入 例如 在 A 中键入 123 现在在 B 中键入 456 B 应包含 456 A 应为空 但是 我在 B 中收到 56 而 A 为空 似乎
  • 当用户尝试打开新实例时返回到已打开的应用程序

    这是我有一段时间想不通的问题 防止第二个实例很简单并且有很多方法 但是恢复已经运行的进程则不然 我想 最小化 撤消最小化并将正在运行的实例置于最前面 在其他窗口后面 将应用程序置于最前面 我使用的语言是 VB NET 和 C 我发现这段代码
  • 简单的if检查多个值vb

    在Sql中我们可以像这样过滤 SELECT FROM 表名 WHERE 列名 IN firstValue secondValue 如何在VB Net中检查 有简单的方法吗 或者 只是 If variable firstValue Or va
  • 创建 Visual Studio 风格的选项/设置对话框

    我目前正在改进 winforms 应用程序的选项对话框 目前我正在使用选项卡控件 我想为类似于 Visual Studio 的设置创建一个表单 对话框 这是怎么做到的 我可以在左侧看到类似树视图的控件 但是他们使用什么控件来显示每个选项页面
  • vba - 扫描文档中的宏并替换宏文本?

    我面临一个谜题 我工作的地方有大量的 Word 模板 它们都包含一个包含一些错误的自动新建事件句柄 这个错误存在于所有模板中 我想知道是否有一种方法可以扫描包含此宏的模板的目录并稍微更改宏代码 这可能吗 是的 你可以这么做 您可以使用以下方
  • 您可以将委托函数作为可选参数传递吗?

    我知道在 Visual Basic 中 委托函数不能contain可选参数 但是方法可以将委托作为可选参数吗 我想做的是这样的 Delegate Sub MyDelegate ByVal input As String Sub MyDele
  • 从文件资源管理器打开我的应用程序中的文件

    我在 VB NET 中创建了自己的应用程序 该应用程序将其文档保存到具有自己的自定义扩展名 eds 的文件中 假设我已将文件扩展名与我的应用程序正确关联 那么当我在文件资源管理器中双击该文件时 如何实际处理应用程序中所选文件的处理 我是在
  • 如何使用 VB.NET 或 C#.NET 代码从 yahoo 邮件 ID 发送邮件

    我想从我的 yahoomail Id 发送邮件 如何使用 VB NET 或 C NET 代码从 yahoo mail Id 发送邮件 需要善意的帮助 提前谢谢 西瓦库马尔 以下是一些制作基本 html 电子邮件消息的示例 http help
  • 您是否必须在 VB.NET 中显式创建表单实例? [复制]

    这个问题在这里已经有答案了 如果一个项目包含Form类 形式可以通过以下方式显示 Form1 Show 或者是否需要首先创建表单的实例 Dim frm As New Form1 frm Show 正如所建议的 使用表单名称使用默认实例 而第
  • windows XP中如何设置默认编码?

    我尝试使用 StreamReader 打开文件并设置编码 但我希望它采用默认 Windows 编码 我如何更改我的 Windows 编码 区域和语言选项控制面板项目 高级选项卡 影响整个计算机

随机推荐