Skip to main content
IronRDP provides comprehensive graphics decoding support for various RDP bitmap codecs and update types. This guide covers image processing, codec support, and rendering patterns.

Graphics Pipeline Overview

  1. Receive PDU - Graphics update arrives from server
  2. Decode - Decompress and decode using appropriate codec
  3. Update Image - Apply decoded pixels to framebuffer
  4. Render - Display the updated framebuffer

Supported Codecs

IronRDP supports these graphics codecs (defined in ironrdp-graphics):
  • Uncompressed Bitmap - Raw pixel data
  • RLE (Run-Length Encoding) - Interleaved RLE compression
  • RDP 6.0 Bitmap Compression - Advanced RDP compression
  • RemoteFX (RFX) - Microsoft’s advanced codec with DWT
  • ZGFX - Bulk compression for graphics

Image Buffer Management

Creating a Decoded Image

Pixel Formats

Accessing Image Data

Processing Graphics Updates

Active Stage Integration

The ActiveStage automatically handles graphics decoding:

Manual Graphics Decoding

For advanced scenarios, decode graphics manually:

RemoteFX Decoding

RemoteFX uses wavelet-based compression for high-quality graphics:

Enabling RemoteFX on Windows Server

Run these PowerShell commands and reboot:
Or use Group Policy Editor (gpedit.msc):
  1. Enable: Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/RemoteFX for Windows Server 2008 R2/Configure RemoteFX
  2. Enable: Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Remote Session Environment/Enable RemoteFX encoding for RemoteFX clients designed for Windows Server 2008 R2 SP1
  3. Reboot

Compression Types

Configuring Client Compression

Rendering Backends

Software Rendering (softbuffer)

IronRDP’s ironrdp-client uses softbuffer for portable software rendering:

GPU Rendering (custom)

For GPU-accelerated rendering, upload the decoded image to a texture:

HTML5 Canvas (WebAssembly)

For web clients, render to HTML5 Canvas:

Optimizing Graphics Performance

Dirty Rectangle Tracking

Only redraw changed regions:

Frame Rate Limiting

Double Buffering

Color Space Conversion

Server-side Graphics

When building an RDP server, generate graphics updates:

Troubleshooting

Graphics Not Updating

  1. Check ActiveStageOutput::GraphicsUpdate is being handled
  2. Verify image buffer is being rendered after updates
  3. Enable logging: IRONRDP_LOG=trace

Color Corruption

  1. Verify pixel format matches between decoder and renderer
  2. Check byte order (RGB vs BGR)
  3. Ensure stride is calculated correctly

Performance Issues

  1. Use appropriate compression level
  2. Implement dirty rectangle tracking
  3. Limit frame rate to display refresh rate
  4. Consider GPU acceleration for large resolutions

Next Steps