dotnet/wpf · error · InvalidOperationException

Image_EncoderNoGlobalMetadata

Error message

Image_EncoderNoGlobalMetadata

What it means

The BitmapEncoder.Metadata setter rejects metadata when the codec does not support global (container-level) metadata (_supportsGlobalMetadata is false), throwing InvalidOperationException(Image_EncoderNoGlobalMetadata). This follows the GuidFormat compatibility check (1185).

Solutions

  1. Verify codec capability before assigning Metadata
  2. Use a format that supports global metadata (Png, Tiff, Jpeg, Wmp)
  3. Attach metadata at the frame level via frame.Metadata where supported
  4. Skip metadata assignment for unsupported formats

Example fix

// before
bmpEncoder.Metadata = metadata; // throws
// after
var tiffEncoder = new TiffBitmapEncoder(); // supports global metadata
tiffEncoder.Metadata = metadata;
Defensive patterns

Strategy: type-guard

Validate before calling

if (encoder is BmpBitmapEncoder) skipMetadata = true; // no global metadata support

Type guard

static bool SupportsGlobalMetadata(BitmapEncoder e) => e is not BmpBitmapEncoder;

Try / catch

try { encoder.Metadata = metadata; }
catch (InvalidOperationException) { log.Info("Codec does not support global metadata; skipping"); }

Prevention

When it happens

Trigger: Assigning encoder.Metadata on an encoder whose container format lacks global-metadata support (e.g. BmpBitmapEncoder), even with a format-compatible BitmapMetadata.

Common situations: Formats like Bmp have no global metadata blocks; generic encoder pipelines that always set Metadata; migrating encoders between formats without capability checks.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14). Data as JSON: /api/errors/02e2d24db65e2d7e. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/Media/Imaging/BitmapEncoder.cs:195

                EnsureMetadata(true);

                return _metadata;
            }
            set
            {
                VerifyAccess();
                EnsureBuiltIn();

                ArgumentNullException.ThrowIfNull(value);

                if (value.GuidFormat != ContainerFormat)
                {
                    throw new InvalidOperationException(SR.Image_MetadataNotCompatible);
                }

                if (!_supportsGlobalMetadata)
                {
                    throw new InvalidOperationException(SR.Image_EncoderNoGlobalMetadata);
                }

                _metadata = value;
            }
        }

        /// <summary>
        /// Set or get the bitmap's global preview
        /// </summary>
        public virtual BitmapSource Preview
        {
            get
            {
                VerifyAccess();
                EnsureBuiltIn();
                return _preview;
            }
            set

View on GitHub (pinned to 81131a70a4)