LoadPicture Function
Returns a picture object (StdPicture) containing an image from a file or memory.
Syntax
LoadPicture([filename] [, size] [, colordepth] [, x, y])
Parameters
filename(Optional):Stringexpression specifying the name of the file to load- Can be bitmap (.bmp), icon (.ico), cursor (.cur), metafile (.wmf), or enhanced metafile (.emf)
- Can be empty string ("") to unload picture (returns Nothing)
- If omitted, returns empty picture object
size(Optional):Longspecifying desired icon/cursor size (only for .ico and .cur files)- Specified in HIMETRIC units (1 HIMETRIC = 0.01 mm)
colordepth(Optional):Longspecifying desired color depthx, y(Optional):Longvalues specifying desired width and height
Return Value
Returns a StdPicture object:
- For valid filename: Picture object containing the loaded image
- For empty string (""): Nothing (unloads picture)
- For no parameters: Empty picture object
- Object can be assigned to Picture properties of controls
- Object implements IPicture interface
Remarks
The LoadPicture function loads graphics from files:
- Primary method for loading images in VB6
- Supports BMP, ICO, CUR, WMF, and EMF formats
- Does NOT support JPG, GIF, or PNG natively
- Returns
StdPictureobject implementingIPicture LoadPicture("")explicitly unloads picture (returnsNothing)LoadPicture()with no arguments returns empty picture- File must exist or runtime error 53 occurs
- Invalid image format causes runtime error 481
- Pictures are not cached (loaded each time)
- For .ico and .cur files, can specify size/colordepth
- Size and colordepth parameters select best match
- Pictures consume memory until released
- Set object = Nothing to release memory
- Common in
Form_Loadfor initial graphics - Used with
Image,PictureBox, andForm.Picture - Can load from resource file with
LoadResPictureinstead SavePictureis the inverse function (saves to file)Pictureobjects areOLEobjects
Typical Uses
- Load
ImagetoPictureBox
Picture1.Picture = LoadPicture("C:\Images\logo.bmp")
- Load
ImagetoFormBackground
Me.Picture = LoadPicture(App.Path & "\background.bmp")
- Load
IcontoImageControl
Image1.Picture = LoadPicture("C:\Icons\app.ico")
- Clear/Unload
Picture
Picture1.Picture = LoadPicture("")
- Dynamic
ImageLoading
Picture1.Picture = LoadPicture(imageFiles(index))
- Conditional
ImageLoading
If fileExists Then
imgStatus.Picture = LoadPicture("ok.bmp")
Else
imgStatus.Picture = LoadPicture("error.bmp")
End If
- Button
Icons
cmdSave.Picture = LoadPicture("save.ico")
- Animation Frame Loading
For i = 1 To 10
frames(i) = LoadPicture("frame" & i & ".bmp")
Next i
Basic Examples
Example 1: Basic Picture Loading
' Load a bitmap to a picture box
Picture1.Picture = LoadPicture("C:\MyApp\logo.bmp")
' Load using relative path
Picture1.Picture = LoadPicture(App.Path & "\images\banner.bmp")
' Load icon to image control
Image1.Picture = LoadPicture(App.Path & "\icon.ico")
Example 2: Clearing Pictures
' Unload picture to free memory
Picture1.Picture = LoadPicture("")
' Alternative way to clear
Set Picture1.Picture = LoadPicture()
' Clear form background
Me.Picture = LoadPicture("")
Example 3: Error Handling
On Error Resume Next
Picture1.Picture = LoadPicture(filename)
If Err.Number <> 0 Then
MsgBox "Could not load image: " & filename, vbCritical
Picture1.Picture = LoadPicture("") ' Clear on error
Err.Clear
End If
Example 4: File Existence Check
Dim picPath As String
picPath = App.Path & "\logo.bmp"
If Dir(picPath) <> "" Then
Picture1.Picture = LoadPicture(picPath)
Else
MsgBox "Image file not found!", vbExclamation
End If
Common Patterns
Pattern 1: SafeLoadPicture
Function SafeLoadPicture(ByVal filename As String, _
ByVal ctrl As Object) As Boolean
On Error Resume Next
Set ctrl.Picture = LoadPicture(filename)
SafeLoadPicture = (Err.Number = 0)
Err.Clear
End Function
Pattern 2: ImageSwitcher
Sub SwitchImage(ByVal imageIndex As Long)
Dim imageFiles As Variant
imageFiles = Array("image1.bmp", "image2.bmp", "image3.bmp")
If imageIndex >= 0 And imageIndex <= UBound(imageFiles) Then
Picture1.Picture = LoadPicture(App.Path & "\" & imageFiles(imageIndex))
End If
End Sub
Pattern 3: PreloadImages
Dim preloadedPics() As StdPicture
Sub PreloadImages()
Dim i As Long
ReDim preloadedPics(1 To 5)
For i = 1 To 5
Set preloadedPics(i) = LoadPicture("pic" & i & ".bmp")
Next i
End Sub
Sub ShowImage(ByVal index As Long)
Set Picture1.Picture = preloadedPics(index)
End Sub
Pattern 4: TogglePicture
Dim currentState As Boolean
Sub TogglePicture()
If currentState Then
Picture1.Picture = LoadPicture("on.bmp")
Else
Picture1.Picture = LoadPicture("off.bmp")
End If
currentState = Not currentState
End Sub
Pattern 5: LoadPictureWithDefault
Function LoadPictureWithDefault(ByVal filename As String, _
ByVal defaultFile As String) As StdPicture
On Error Resume Next
Set LoadPictureWithDefault = LoadPicture(filename)
If Err.Number <> 0 Then
Set LoadPictureWithDefault = LoadPicture(defaultFile)
End If
Err.Clear
End Function
Pattern 6: ClearAllPictures
Sub ClearAllPictures(frm As Form)
Dim ctrl As Control
For Each ctrl In frm.Controls
If TypeOf ctrl Is PictureBox Or TypeOf ctrl Is Image Then
ctrl.Picture = LoadPicture("")
End If
Next ctrl
frm.Picture = LoadPicture("")
End Sub
Pattern 7: LoadFromResourceOrFile
Function LoadFromResourceOrFile(ByVal resID As Long, _
ByVal filename As String) As StdPicture
On Error Resume Next
' Try resource first
Set LoadFromResourceOrFile = LoadResPicture(resID, vbResBitmap)
' Fall back to file
If Err.Number <> 0 Then
Set LoadFromResourceOrFile = LoadPicture(filename)
End If
Err.Clear
End Function
Pattern 8: ButtonImageState
Sub SetButtonState(btn As CommandButton, enabled As Boolean)
If enabled Then
btn.Picture = LoadPicture(App.Path & "\btn_enabled.ico")
btn.Enabled = True
Else
btn.Picture = LoadPicture(App.Path & "\btn_disabled.ico")
btn.Enabled = False
End If
End Sub
Pattern 9: LoadPictureIfExists
Function LoadPictureIfExists(ByVal filename As String) As StdPicture
If Dir(filename) <> "" Then
Set LoadPictureIfExists = LoadPicture(filename)
Else
Set LoadPictureIfExists = LoadPicture() ' Empty picture
End If
End Function
Pattern 10: CachedPictureLoader
Dim pictureCache As New Collection
Function LoadPictureCached(ByVal filename As String) As StdPicture
On Error Resume Next
' Try to get from cache
Set LoadPictureCached = pictureCache(filename)
' If not in cache, load and cache it
If Err.Number <> 0 Then
Set LoadPictureCached = LoadPicture(filename)
pictureCache.Add LoadPictureCached, filename
End If
Err.Clear
End Function
Advanced Examples
Example 1: PictureManager Class
' Class: PictureManager
Private m_pictures As Collection
Private m_basePath As String
Private Sub Class_Initialize()
Set m_pictures = New Collection
m_basePath = App.Path & "\images\"
End Sub
Public Sub LoadPicture(ByVal name As String, ByVal filename As String)
Dim pic As StdPicture
On Error Resume Next
Set pic = VBA.LoadPicture(m_basePath & filename)
If Err.Number = 0 Then
m_pictures.Add pic, name
Else
Err.Raise vbObjectError + 1000, "PictureManager", _
"Failed to load: " & filename
End If
End Sub
Public Function GetPicture(ByVal name As String) As StdPicture
On Error Resume Next
Set GetPicture = m_pictures(name)
If Err.Number <> 0 Then
Err.Raise vbObjectError + 1001, "PictureManager", _
"Picture not found: " & name
End If
End Function
Public Sub ClearAll()
Dim i As Long
For i = m_pictures.Count To 1 Step -1
m_pictures.Remove i
Next i
End Sub
Public Property Get Count() As Long
Count = m_pictures.Count
End Property
Private Sub Class_Terminate()
ClearAll
Set m_pictures = Nothing
End Sub
Example 2: Image Slideshow
' Form with Picture1, Timer1, cmdNext, cmdPrev
Dim imageFiles() As String
Dim currentIndex As Long
Private Sub Form_Load()
LoadImageList
currentIndex = 0
ShowCurrentImage
Timer1.Interval = 3000 ' 3 seconds
Timer1.Enabled = True
End Sub
Private Sub LoadImageList()
imageFiles = Array( _
"slide1.bmp", _
"slide2.bmp", _
"slide3.bmp", _
"slide4.bmp", _
"slide5.bmp" _
)
End Sub
Private Sub ShowCurrentImage()
On Error Resume Next
Picture1.Picture = LoadPicture(App.Path & "\slides\" & imageFiles(currentIndex))
If Err.Number <> 0 Then
Picture1.Cls
Picture1.Print "Image not found"
End If
End Sub
Private Sub Timer1_Timer()
NextImage
End Sub
Private Sub cmdNext_Click()
NextImage
End Sub
Private Sub cmdPrev_Click()
PrevImage
End Sub
Private Sub NextImage()
currentIndex = currentIndex + 1
If currentIndex > UBound(imageFiles) Then
currentIndex = 0
End If
ShowCurrentImage
End Sub
Private Sub PrevImage()
currentIndex = currentIndex - 1
If currentIndex < 0 Then
currentIndex = UBound(imageFiles)
End If
ShowCurrentImage
End Sub
Example 3: Dynamic Button Icons
' Form with command buttons array: cmdAction(0 to 4)
Private Type ButtonConfig
caption As String
iconFile As String
enabled As Boolean
End Type
Private buttonConfigs() As ButtonConfig
Private Sub Form_Load()
InitializeButtons
ApplyButtonConfigs
End Sub
Private Sub InitializeButtons()
ReDim buttonConfigs(0 To 4)
With buttonConfigs(0)
.caption = "New"
.iconFile = "new.ico"
.enabled = True
End With
With buttonConfigs(1)
.caption = "Open"
.iconFile = "open.ico"
.enabled = True
End With
With buttonConfigs(2)
.caption = "Save"
.iconFile = "save.ico"
.enabled = False
End With
With buttonConfigs(3)
.caption = "Print"
.iconFile = "print.ico"
.enabled = False
End With
With buttonConfigs(4)
.caption = "Exit"
.iconFile = "exit.ico"
.enabled = True
End With
End Sub
Private Sub ApplyButtonConfigs()
Dim i As Long
Dim iconPath As String
For i = 0 To UBound(buttonConfigs)
With cmdAction(i)
.caption = buttonConfigs(i).caption
.enabled = buttonConfigs(i).enabled
iconPath = App.Path & "\icons\" & buttonConfigs(i).iconFile
If Dir(iconPath) <> "" Then
.Picture = LoadPicture(iconPath)
End If
End With
Next i
End Sub
Public Sub SetButtonEnabled(ByVal index As Long, ByVal enabled As Boolean)
If index >= 0 And index <= UBound(buttonConfigs) Then
buttonConfigs(index).enabled = enabled
cmdAction(index).enabled = enabled
End If
End Sub
Example 4: Status Indicator
' Form with imgStatus (Image control)
Public Enum StatusType
stIdle = 0
stProcessing = 1
stSuccess = 2
stWarning = 3
stError = 4
End Enum
Private statusIcons() As StdPicture
Private currentStatus As StatusType
Private Sub Form_Load()
LoadStatusIcons
SetStatus stIdle
End Sub
Private Sub LoadStatusIcons()
Dim basePath As String
basePath = App.Path & "\icons\"
ReDim statusIcons(0 To 4)
On Error Resume Next
Set statusIcons(stIdle) = LoadPicture(basePath & "idle.ico")
Set statusIcons(stProcessing) = LoadPicture(basePath & "processing.ico")
Set statusIcons(stSuccess) = LoadPicture(basePath & "success.ico")
Set statusIcons(stWarning) = LoadPicture(basePath & "warning.ico")
Set statusIcons(stError) = LoadPicture(basePath & "error.ico")
If Err.Number <> 0 Then
MsgBox "Warning: Some status icons could not be loaded", vbExclamation
Err.Clear
End If
End Sub
Public Sub SetStatus(ByVal newStatus As StatusType)
currentStatus = newStatus
If newStatus >= 0 And newStatus <= UBound(statusIcons) Then
If Not statusIcons(newStatus) Is Nothing Then
Set imgStatus.Picture = statusIcons(newStatus)
End If
End If
End Sub
Public Function GetStatus() As StatusType
GetStatus = currentStatus
End Function
Private Sub Form_Unload(Cancel As Integer)
Dim i As Long
For i = 0 To UBound(statusIcons)
Set statusIcons(i) = Nothing
Next i
End Sub
Error Handling
' Error 53: File not found
On Error Resume Next
Picture1.Picture = LoadPicture("nonexistent.bmp")
If Err.Number = 53 Then
MsgBox "File not found!"
End If
' Error 481: Invalid picture
Picture1.Picture = LoadPicture("corrupt.bmp")
If Err.Number = 481 Then
MsgBox "Invalid or corrupt image file!"
End If
' Error 7: Out of memory (very large images)
Picture1.Picture = LoadPicture("huge.bmp")
If Err.Number = 7 Then
MsgBox "Insufficient memory to load image!"
End If
' Safe loading pattern
Function TryLoadPicture(ByVal filename As String, _
ByRef pic As StdPicture) As Boolean
On Error Resume Next
Set pic = LoadPicture(filename)
TryLoadPicture = (Err.Number = 0)
Err.Clear
End Function
Performance Considerations
- File I/O Overhead:
LoadPicturereads from disk (relatively slow) - Memory Usage: Large images consume significant memory
- No Caching: Each call loads from disk (not cached automatically)
- Preloading: For frequently used images, load once and cache
- Release Memory: Set
picture = Nothingwhen done - Format Matters: BMP files are larger but faster to load than compressed formats
- Network Paths: Loading from network shares is much slower
Best Practices
- Always handle errors when loading pictures (file may not exist)
- Check file existence before loading (use Dir function)
- Use relative paths (
App.Path) for portability - Release memory by setting picture objects to
Nothingwhen done - Preload frequently used images for better performance
- Clear pictures with
LoadPicture("")not by setting toNothingdirectly - Validate file extensions before attempting to load
- Use resource files (
LoadResPicture) for embedded images - Handle Out of Memory errors for large images
- Consider image size - large BMPs consume lots of memory
Comparison with Related Functions
| Function | Purpose | Return Type | Notes |
|---|---|---|---|
LoadPicture |
Load from file | StdPicture |
Supports BMP, ICO, CUR, WMF, EMF |
LoadResPicture |
Load from resources | StdPicture |
Embedded in compiled EXE |
SavePicture |
Save to file | N/A (Sub) | Inverse of LoadPicture |
Set statement |
Assign picture | N/A | Used to assign picture objects |
LoadPicture vs LoadResPicture
' LoadPicture - from file (requires external file)
Picture1.Picture = LoadPicture("logo.bmp")
' LoadResPicture - from resources (embedded in EXE)
Picture1.Picture = LoadResPicture(101, vbResBitmap)
When to use each:
- LoadPicture: Images that change, user-selected files, development
- LoadResPicture: Static images, distribution (no external files), resources
Platform Notes
- Available in all VB6 versions
- Part of VBA core library
- Returns
StdPictureobject (OLE automation object) - Implemented in MSVBVM60.DLL runtime
- Supports Windows native image formats
- No built-in support for JPG, GIF, PNG (requires third-party controls or APIs)
- Icon/Cursor files can contain multiple sizes -
LoadPictureselects best match - Metafiles (WMF/EMF) are vector formats (scalable)
- Bitmaps (BMP) are raster formats (not scalable)
Limitations
- No JPG/GIF/PNG: Native support limited to BMP, ICO, CUR, WMF, EMF
- No compression: BMP files can be very large
- No caching: Each call reloads from disk
- Memory intensive: Large images consume lots of RAM
- Synchronous: Blocks while loading (no async loading)
- No progress: Cannot monitor loading progress
- No metadata: Cannot read EXIF or other metadata
- No transformations: Cannot resize/rotate during load
- File path only: Cannot load from memory or stream
- Error codes limited: Generic error messages for problems
Related Functions
LoadResPicture: Load picture from resource fileSavePicture: Save picture object to fileSet: Assign object referencesNothing: Release object referencesDir: Check file existence before loadingApp.Path: Get application directory for relative paths