Access - Export images from Image controls in forms
ms-access, ms-access-2007, optimization
Solution
Finally here is the code that worked as intended : Export a PNG image from a form's Image control.
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
Problem
I have been searching for a way to extract images from access forms. A search on Google will nearly always point to OLEtoDisk. This software allows to export images stored in OLE fields inside access tables. This is not what I want. I have a form with some logos, headers and background images. Those images are making the database become bigger and bigger (because they are embedded in the form). I would extract them, place them on our server together with the back-end file and add them back to my forms but this time as linked images instead of embedded images. I hope I am making myself clear. Any suggestions are welcome. EDIT : Added the code I'm using to export an Image control's PictureData as an image file. This code doesn't work as intended. I found out that PictureData is a byte array but after copying it in a file, I get one NUL character every two characters. ``` 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 ```