New to Telerik UI for WPF? Start a free 30-day trial

Decoding JPEG 2000 Images

Updated on Oct 5, 2026

PDF files can store JPEG 2000 image data using the JPXDecode filter. RadPdfViewer relies on RadPdfProcessing to open, render, and export the underlying PDF document, and you can enable JPX decoding by registering an optional decoder from the Telerik.Windows.Documents.JpxDecodeUtils NuGet package—no custom IPdfFilter implementation is required for this scenario.

This complements the fully custom decoder approach described in Customize PDF Rendering. Use the built-in JpxImageDecoder whenever you only need standard JPEG 2000 decoding, and fall back to a custom IPdfFilter implementation only for specialized decoding requirements.

Installing the Decoder Package

Add the Telerik.Windows.Documents.JpxDecodeUtils NuGet package to the project that hosts RadPdfViewer.

Registering the JpxImageDecoder

The FixedExtensibilityManager.JpxImageDecoder property is global for the application, so register a single JpxImageDecoder instance once, before any PDF document that contains JPX images is imported, rendered, or exported. A good place to do this is during application or view startup, before RadPdfViewer loads a document.

Registering the JpxImageDecoder on startup

C#
if (FixedExtensibilityManager.JpxImageDecoder == null)
{
	FixedExtensibilityManager.JpxImageDecoder = new JpxImageDecoder();
}

Once registered, RadPdfViewer uses this decoder automatically whenever it encounters JPX-encoded images in a loaded PDF document. For more information about working with images in RadPdfProcessing, see the Images article in the Document Processing Libraries documentation.

Handling Missing Decoder Registration

If a document requires JPX decoding and no decoder is registered, RadPdfProcessing throws a JpxImageDecoderNotConfiguredException. Attach a handler to the respective import and export exception events to skip the unsupported images instead of failing the whole operation, and leave all other exception types unhandled so unrelated errors are not silently swallowed.

See Also