Hola usando GDI+ creo que seria lo mas comodo, seguramente hay otras formas sin nececidad de cargar la imagen, pero bueno ya requiere un poco el estudio de las cabezeras de cada formato.
Option Explicit
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As Long
Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal FileName As Long, ByRef Image As Long) As Long
Private Declare Function GdiplusStartup Lib "gdiplus" (ByRef Token As Long, ByRef lpInput As GDIPlusStartupInput, Optional ByRef lpOutput As Any) As Long
Private Declare Function GdiplusShutdown Lib "gdiplus" (ByVal Token As Long) As Long
Private Declare Function GdipGetImageWidth Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Long) As Long
Private Declare Function GdipGetImageHeight Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mHeight As Long) As Long
Private Type GDIPlusStartupInput
GdiPlusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type
Public Function GetImageSize(ByVal FileName As String, ByRef Width As Long, ByRef Height As Long) As Boolean
Dim hImg As Long
Dim GdipToken As Long
Dim GdipStartupInput As GDIPlusStartupInput
GdipStartupInput.GdiPlusVersion = 1&
If GdiplusStartup(GdipToken, GdipStartupInput, ByVal 0&) = 0 Then
If GdipLoadImageFromFile(StrPtr(FileName), hImg) = 0 Then
GdipGetImageWidth hImg, Width
GdipGetImageHeight hImg, Height
GetImageSize = True
Call GdipDisposeImage(hImg)
End If
Call GdiplusShutdown(GdipToken)
End If
End Function
Private Sub Form_Load()
Dim W As Long, H As Long
GetImageSize "C:\Users\Windows\Desktop\Logo.emf", W, H
Debug.Print W, H
End Sub