3

我一直在寻找一种从访问表单中提取图像的方法。在 Google 上搜索几乎总是指向OLEtoDisk。该软件允许导出存储在访问表内的 OLE 字段中的图像。这不是我想要的。

我有一个带有一些徽标、标题和背景图像的表单。这些图像使数据库变得越来越大(因为它们嵌入在表单中)。我会提取它们,将它们与后端文件一起放在我们的服务器上,然后将它们添加回我的表单,但这次是作为链接图像而不是嵌入图像。

我希望我清楚自己。欢迎任何建议。

编辑:添加了我用来将图像控件的 PictureData 导出为图像文件的代码。此代码无法按预期工作。我发现 PictureData 是一个字节数组,但是在将它复制到一个文件中之后,我每两个字符得到一个 NUL 字符。

Public Function savePict(pImage As Access.Image)
    Dim fname As String 'The name of the file to save the picture to
    Dim iFileNum As Double

    fname = Environ("Temp") + "\temp.png" ' Destination file path
    iFileNum = FreeFile 'The next free file from the file system

    Open fname For Binary Access Write As iFileNum
        Dim tbyte As Variant
        Dim i As Double
        'Write the byte array to the file
        For i = 0 To Len(pImage.PictureData)
            Put #iFileNum, , pImage.PictureData(i)
        Next i
    Close #iFileNum
End Function
4

4 回答 4

4

图片数据是一个EMF文件,有一个8字节的包装。这是您的例程修改为使用正确的文件扩展名

Public Function savePict(pImage As Access.Image)
    Dim fname As String 'The name of the file to save the picture to
    Dim iFileNum As Double
    Dim bArray() As Byte, cArray() As Byte
    Dim lngRet As Long

    fname = Environ("Temp") + "\temp.emf" ' Destination file path
    iFileNum = FreeFile 'The next free file from the file system

    ' Resize to hold entire PictureData prop
    ReDim bArray(LenB(pImage.PictureData) - 1)
    ' Resize to hold the EMF wrapped in the PictureData prop
    ReDim cArray(LenB(pImage.PictureData) - (1 + 8))
    ' Copy to our array
    bArray = pImage.PictureData
    For lngRet = 8 To UBound(cArray) 
        cArray(lngRet - 8) = bArray(lngRet)
    Next

    Open fname For Binary Access Write As iFileNum
    'Write the byte array to the file
    Put #iFileNum, , cArray
    Close #iFileNum
End Function
于 2012-05-29T18:28:25.797 回答
3

最后是按预期工作的代码:从表单的图像控件导出 PNG 图像。

Public Function savePict(pImage As Access.Image)
    Dim fname As String 'The name of the file to save the picture to
    fname = Environ("Temp") + "\temp.png" ' Destination file path

    Dim iFileNum As Double
    iFileNum = FreeFile 'The next free file from the file system

    Dim pngImage As String 'Stores the image data as a string
    pngImage = StrConv(pImage.PictureData, vbUnicode) 'Convert the byte array to a string

    'Writes the string to the file
    Open fname For Binary Access Write As iFileNum
        Put #iFileNum, , pngImage
    Close #iFileNum
End Function
于 2012-05-30T03:53:43.463 回答
1
  1. 获取具有您喜欢的背景图像或自动套用格式的表单
  2. 右键单击导航窗格中的表单并选择导出 >> XML
  3. 在向导的第一页上,选择一个目标来放置一些文件(桌面很好)
  4. 然后将出现一个带有三个复选框的小对话框
  5. 选择第一个选项(数据)和第三个选项(演示),然后单击确定
  6. 导出完成后单击向导最后一页的关闭按钮
于 2018-01-05T17:38:34.517 回答
0

如果您希望在另一个访问数据库中重新使用该图像(即您丢失了原始图像文件,但想在其他地方使用它),一个更简单的方法是将对象(表单、报告等)导入您的新数据库使用外部数据 -> 访问菜单访问数据库。

然后,您可以将图像控件复制粘贴到您想要使用它的位置...

不幸的是,在 Access 数据库之间复制/粘贴图像控件并不能如您所愿。

于 2015-06-27T21:48:32.577 回答