VBA – WIA – FilterInfos and Filter Properties

 

I’ve written a couple articles about using WIA to work with images:

and many more.

In the past, I’ve been asked how can I determine which filters are available and which properties each filter possesses since this isn’t listed in the documentation!

Well, I created a couple ‘helper functions’ that provide this information by simply iterating over the collections and displaying it to me via the VBE Immediate Windows.

List the Filters

Sub WIA_ListAvailableFilters()
    #Const WIA_EarlyBind = True    'True => Early Binding / False => Late Binding
    #If WIA_EarlyBind = True Then
        Dim oIP               As WIA.ImageProcess

        Set oIP = New WIA.ImageProcess
    #Else
        Dim oIP               As Object

        Set oIP = CreateObject("WIA.ImageProcess")
    #End If
    Dim i As Long

    For i = 1 To oIP.FilterInfos.Count
        Debug.Print i, oIP.FilterInfos(i).Name, oIP.FilterInfos(i).FilterID ', oIP.FilterInfos(i).Description
    Next i

Error_Handler_Exit:
    On Error Resume Next
    Set oIP = Nothing
End Sub

running this will return something like:

 1            RotateFlip    {FB912B7A-C57F-479C-9209-4895C1513F2D}
 2            Crop          {C685961E-A385-4f41-A2E5-225A2518BA59}
 3            Scale         {4EBB0166-C18B-4065-9332-109015741711}
 4            Stamp         {F73D0AA9-30B7-417c-8143-23DBD0538F97}
 5            Exif          {8F75768F-7D7C-44c4-93FE-E3EF28ECD259}
 6            Frame         {2C5EB755-63A8-40cb-B10D-7CF8F3E0CE71}
 7            ARGB          {654A6A04-FB39-4d68-9B65-72E50E8323A0}
 8            Convert       {42A6E907-1D2F-4b38-AC50-31ADBE2AB3C2}

 

List the Filters and Their Respective Properties

So now that we are aware of the available filters, what about some information on each one’s properties that we can work with! Below are 2 ways of getting such information.

A simplified version

Sub WIA_ListAvailableProperties1()
    #Const WIA_EarlyBind = True    'True => Early Binding / False => Late Binding
    #If WIA_EarlyBind = True Then
        Dim oIP               As WIA.ImageProcess

        Set oIP = New WIA.ImageProcess
    #Else
        Dim oIP               As Object

        Set oIP = CreateObject("WIA.ImageProcess")
    #End If
    Dim i As Long
    Dim j As Long

    For i = 1 To oIP.FilterInfos.Count
        Debug.Print oIP.FilterInfos(i).Name, oIP.FilterInfos(i).FilterID
        
        oIP.Filters.Add oIP.FilterInfos(i).FilterID
        For j = 1 To oIP.Filters(i).Properties.Count
            Debug.Print , oIP.Filters(i).Properties(j).Name
        Next j
    Next i

Error_Handler_Exit:
    On Error Resume Next
    Set oIP = Nothing
End Sub

which will return something like:

RotateFlip    {FB912B7A-C57F-479C-9209-4895C1513F2D}
              RotationAngle
              FlipHorizontal
              FlipVertical
              FrameIndex
Crop          {C685961E-A385-4f41-A2E5-225A2518BA59}
              Left
              Top
              Right
              Bottom
              FrameIndex
Scale         {4EBB0166-C18B-4065-9332-109015741711}
              MaximumWidth
              MaximumHeight
              PreserveAspectRatio
              FrameIndex
Stamp         {F73D0AA9-30B7-417c-8143-23DBD0538F97}
              ImageFile
              Left
              Top
              FrameIndex
Exif          {8F75768F-7D7C-44c4-93FE-E3EF28ECD259}
              Remove
              ID
              Type
              Value
              FrameIndex
Frame         {2C5EB755-63A8-40cb-B10D-7CF8F3E0CE71}
              Remove
              ImageFile
              FrameIndex
ARGB          {654A6A04-FB39-4d68-9B65-72E50E8323A0}
              ARGBData
              FrameIndex
Convert       {42A6E907-1D2F-4b38-AC50-31ADBE2AB3C2}
              FormatID
              Quality
              Compression

or a more complete version

Sub WIA_ListAvailableProperties2()
    #Const WIA_EarlyBind = True    'True => Early Binding / False => Late Binding
    #If WIA_EarlyBind = True Then
        Dim oIP               As WIA.ImageProcess

        Set oIP = New WIA.ImageProcess
    #Else
        Dim oIP               As Object

        Set oIP = CreateObject("WIA.ImageProcess")
    #End If
    Dim i As Long

    For i = 1 To oIP.FilterInfos.Count
        Debug.Print oIP.FilterInfos(i).Name, oIP.FilterInfos(i).FilterID
        Debug.Print String(50, "-")
        Debug.Print oIP.FilterInfos(i).Description
        Debug.Print
        Debug.Print
    Next i

Error_Handler_Exit:
    On Error Resume Next
    Set oIP = Nothing
End Sub

that will in turn output

RotateFlip    {FB912B7A-C57F-479C-9209-4895C1513F2D}
--------------------------------------------------
Rotates, in 90 degree increments, and Flips, horizontally or vertically.

RotationAngle  - Set the RotationAngle property to 90, 180, or 270 if you wish
                 to rotate, otherwise 0 [the default]
FlipHorizontal - Set the FlipHorizontal property to True if you wish to flip
                 the image horizontally, otherwise False [the default]
FlipVertical   - Set the FlipVertical property to True if you wish to flip
                 the image vertically, otherwise False [the default]
FrameIndex     - Set the FrameIndex property to the index of a frame if you
                 wish to modify a frame other than the ActiveFrame,
                 otherwise 0 [the default]


Crop          {C685961E-A385-4f41-A2E5-225A2518BA59}
--------------------------------------------------
Crops the image by the specified Left, Top, Right, and Bottom margins.

Left       - Set the Left property to the left margin (in pixels)
             if you wish to crop along the left, otherwise 0 [the default]
Top        - Set the Top property to the top margin (in pixels)
             if you wish to crop along the top, otherwise 0 [the default]
Right      - Set the Right property to the right margin (in pixels)
             if you wish to crop along the right, otherwise 0 [the default]
Bottom     - Set the Bottom property to the bottom margin (in pixels)
             if you wish to crop along the bottom, otherwise 0 [the default]
FrameIndex - Set the FrameIndex property to the index of a frame if you
             wish to modify a frame other than the ActiveFrame,
             otherwise 0 [the default]


Scale         {4EBB0166-C18B-4065-9332-109015741711}
--------------------------------------------------
Scales image to the specified Maximum Width and Maximum Height preserving
Aspect Ratio if necessary.

MaximumWidth        - Set the MaximumWidth property to the width (in pixels)
                      that you wish to scale the image to.
MaximumHeight       - Set the MaximumHeight property to the height (in pixels)
                      that you wish to scale the image to.
PreserveAspectRatio - Set the PreserveAspectRatio property to True
                      [the default] if you wish to maintain the current aspect
                      ration of the image, otherwise False and the image will
                      be stretched to the MaximumWidth and MaximumHeight
FrameIndex          - Set the FrameIndex property to the index of a frame if
                      you wish to modify a frame other than the ActiveFrame,
                      otherwise 0 [the default]


Stamp         {F73D0AA9-30B7-417c-8143-23DBD0538F97}
--------------------------------------------------
Stamps the specified ImageFile at the specified Left and Top coordinates.

ImageFile  - Set the ImageFile property to the ImageFile object that you wish
             to stamp
Left       - Set the Left property to the offset from the left (in pixels)
             that you wish to stamp the ImageFile at [default is 0]
Top        - Set the Top property to the offset from the top (in pixels) that
             you wish to stamp the ImageFile at [default is 0]
FrameIndex - Set the FrameIndex property to the index of a frame if you wish to
             modify a frame other than the ActiveFrame, otherwise 0
             [the default]


Exif          {8F75768F-7D7C-44c4-93FE-E3EF28ECD259}
--------------------------------------------------
Adds/Removes the specified Exif Property.

Remove     - Set the Remove property to True if you wish to remove the
             specified Exif property, otherwise False [the default] to add the
             specified exif property
ID         - Set the ID property to the PropertyID you wish to Add or Remove
Type       - Set the Type property to indicate the WiaImagePropertyType of the
             Exif property you wish to Add (ignored for Remove)
Value      - Set the Value property to the Value of the Exif property you wish
             to Add (ignored for Remove)
FrameIndex - Set the FrameIndex property to the index of a frame if you
             wish to modify a frame other than the ActiveFrame,
             otherwise 0 [the default]


Frame         {2C5EB755-63A8-40cb-B10D-7CF8F3E0CE71}
--------------------------------------------------
Adds/Removes the specified Frame.

Remove     - Set the Remove property to True if you wish to remove the
             specified FrameIndex, otherwise False [the default] to Insert the
             ImageFile before the specified FrameIndex
ImageFile  - Set the ImageFile property to the ImageFile object whose
             ActiveFrame that you wish to add (ignored for Remove)
FrameIndex - For Remove, set the FrameIndex property to the index of the frame
             you wish to remove, otherwise for add, set the FrameIndex to the
             index of the frame to insert the ImageFile before, otherwise 0
             [the default] to append a frame from the ImageFile specified


ARGB          {654A6A04-FB39-4d68-9B65-72E50E8323A0}
--------------------------------------------------
Updates the image bits with those specified.

ARGBData -   Set the ARGBData property to the Vector of Longs that represent
             the ARGB data for the specified FrameIndex (the width and height
             must match)
FrameIndex - Set the FrameIndex property to the index of the frame whose ARGB
             data you wish to modify, otherwise 0 [the default] to modify the
             ActiveFrame


Convert       {42A6E907-1D2F-4b38-AC50-31ADBE2AB3C2}
--------------------------------------------------
Converts the resulting ImageFile to the specified type.

FormatID    - Set the FormatID property to the supported raster image format
              desired, currently you can choose from wiaFormatBMP,
              wiaFormatPNG, wiaFormatGIF, wiaFormatJPEG, or wiaFormatTIFF
Quality     - For a JPEG file, set the Quality property to any value from 1 to
              100 [the default] to specify quality of JPEG compression
Compression - For a TIFF file, set the Compression property to CCITT3, CCITT4,
              RLE or Uncompressed to specify the compression scheme,
              otherwise LZW [the default]

So now you know all the available WIA ImageProcess FilterInfos filters and their respective Properties, and possess functions you can run at any time to extract such information for yourself.