Decoder-Specific Registry Entries

In addition to the registry entries required for all encoders and decoders, the following registry entries are required specifically for decoders.

These entries register your decoder under the category of Windows Imaging Component (WIC) decoders. The first GUID in these entries is the category identifier (CATID) for WICBitmapDecoders.

            {Decoder CLSID}
               CLSID = {Decoder CLSID}
               FriendlyName = {Name of Decoder}

As noted in Discovery and Arbitration section of How The Windows Imaging Component Works, the mechanism that enables an appropriate decoder for a specific image to be discovered at run time is based on matching an identifying pattern embedded in the image file with a pattern specified in the decoder’s registry entry. To enable run-time discovery of decoders, you must register the unique identifying pattern for your image format as follows. All of these registry entries are required except for the EndOfStream entry, which is optional, as described in the following table.

      {Decoder CLSID}
               Position = Offset in block
               Length = Length of pattern
               Pattern = Pattern to match
               Mask = FF FF FF FF
               EndOfStream = 0|1

PositionThe offset into the file where the pattern can be found.
LengthThe length of the pattern.
PatternThe actual bits that make up the pattern. These are the bits that are matched against the identifying pattern in an image file during discovery.
MaskAllows for wildcard values in patterns. The mask is applied by performing a logical AND operation on the pattern and the mask. Any bit in the pattern that corresponds to a bit in the mask with a value of 0 is ignored.
EndOfStreamThe offset of the identifying pattern should be calculated from the end of the stream, rather than the beginning. Some image formats place the identifying pattern at or near the end of the file. Because the default is to seek from the beginning, unless your pattern is near the end of the file, you can omit this entry.


A codec can support more than one identifying pattern. In that case, you would repeat all of the keys under HKEY_CLASSES_ROOT\CLSID\{Decoder CLSID}\Patterns, and use the numerical key (0 in the example) to distinguish between the different patterns. You must include each of the four values under the key for each pattern.

Registering a Container Format with Metadata Readers

If you create a new container format for your codec, you must also create registry entries to support discovery of metadata readers for the metadata blocks in your images, just as you did for the metadata writers. The following entries need to be created under the class identifier (CLSID) of the metadata reader for each metadata format your container format supports. (Note that, if your codec uses a Tagged Image File Format (TIFF) container, then this information is already in the registry.)

      {Metadata Reader CLSID}
            {Container Format GUID}
                  Position = Offset relative to its container
                  Pattern = Pattern used for metadata header
                  Mask = FF FF FF FF
                  DataOffset = Offset from beginning of header

Because the entries for metadata readers are also used for discovery, they are very similar to the entries for decoders. These entries are used by the component factory to find the metadata readers supported by your container, and to select the appropriate one, when your IWICMetadataBlockReader implementation requests a metadata reader.

PositionThe offset in the metadata block’s container where the metadata header can be found. For top-level metadata blocks, this is the offset in the file stream. For metadata blocks nested in other metadata blocks, it is the offset relative to the containing metadata block.
PatternThe actual bits that make up the pattern. These are the bits that are matched against the identifying pattern in an image file during discovery.
MaskThe metadata header is generally defined by the metadata handler. You should use the standard metadata header for each reader unless, for some reason, the pattern must have a different format in your container.
DataOffsetThe offset from the beginning of the metadata header at which the actual data begins. In cases where the metadata isn’t located at a specific offset from the header, this entry can be omitted.


Related topics

Encoder-Specific Registry Entries
Integration with Windows Photo Gallery and Windows Explorer
How to Write a WIC-Enabled CODEC
Windows Imaging Component Overview