Доступ - Экспорт изображений из элементов управления изображениями в формах

I have been searching for a way to extract images from access forms. A search on Google will nearly always point to 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
 ron tornambe29 мая 2012 г., 19:18
Я думаю, что PictureData должен быть преобразован в Base64.
 user142267030 мая 2012 г., 05:23
Спасибо за вашу помощь. Вы показали мне путь. В конце концов мне нужно было преобразование.
 ron tornambe29 мая 2012 г., 05:26
Я сделал это много лет назад. Единственный остаток решения, которое я могу предоставить на данный момент, - это поиск недокументированной системы commamd: 712, ex. SysCmd (712, PictureData)
 user142267029 мая 2012 г., 10:01
После дополнительных поисков я обнаружил, что мне нужно сохранить PictureData элемента управления Image в файл. Я обнаружил, что PictureData является байтовым массивом, но после копирования его в файл я получаю один NUL-символ каждые два символа. Любая идея?

Ответы на вопрос(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
 user142267031 мая 2012 г., 02:37
Вы можете увидеть в вопросе, что я уже нашел этот сайт. Код, о котором вы говорите, не поддерживает файл PNG. Но все равно спасибо за комментарий. Это может помочь другим.
 14 апр. 2016 г., 12:00
Я мог бы прояснить путаницу. Существует два способа встраивания изображений в MS Access (см.this screenshot). «Старый» один («Преобразовать все данные изображения в растровые изображения») преобразует все изображения в EMF, «новый». один («Сохранить исходный формат изображения») сохранит исходный формат без изменений.
 03 мар. 2018 г., 02:59
У меня был старый файл MDB преобразован в ACDB. Форма имеет встроенные изображения JPG в элемент управления изображения. Эта процедура отлично работала для извлечения изображений в EMF. Спасибо.
 30 мая 2012 г., 15:06
lebans.com/imagecontroltoclipboard.htm выдает его в буфер обмена, но он прочтет информацию в первых 8 байтах, которые я пропустил, и сохраню в том формате, в котором его удерживал доступ.
 user142267030 мая 2012 г., 05:14
Спасибо за ваш ответ, но я уверен, что это файл PNG.
Решение Вопроса

Наконец, вот код, который работал как предполагалось: экспортируйте изображение 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
 30 мая 2012 г., 06:27
Потрясающие! Отличная работа.
Take your form that has a background image or AutoFormat that you like Right-click on the form in the Navigation Pane and select Export >> XML On the first page of the wizard, select a destination to drop some files (Desktop is fine) A small dialog will then appear with three check boxes Select the first option (Data) and third option (Presentation) and then click OK Click the Close button on the last page of the wizard after the export is complete

Если вы хотите повторно использовать изображение в другой базе данных доступа (т.е. вы потеряли исходный файл изображения, но хотите использовать его в другом месте), гораздо более простым способом будет импортировать объект (форму, отчет и т. Д.) В новый Доступ к базе данных с использованием внешних данных - & gt; Доступ к меню.

Затем вы можете просто скопировать вставить изображение элемента управления, где вы хотите использовать его ...

К сожалению, копирование / вставка элементов управления изображениями между базами данных Access не работает так, как вам нравится.

Ваш ответ на вопрос