---
title: "Convert To WPF"
canonical: https://www.graphicsmill.com/samples/Interoperability/WPFInteroperability/ConvertToWPF_cs
product: "Graphics Mill"
source: "Interoperability/WPFInteroperability/ConvertToWPF.cs"
---

# Convert To WPF

Converts Graphics Mill Bitmap to WPF BitmapSource.

## Instruction

Write a C# program that converts GraphicsMill Bitmap loaded from "Chicago.jpg" to WPF BitmapSource using extension method ToBitmapSource which creates BitmapFrame with direct Scan0 access, matching WPF PixelFormat via conversion dictionary, and DPI preservation, then encodes to TIFF using TiffBitmapEncoder with Zip compression, adding the BitmapSource as a frame and saving to "ChicagoSavedWithWPF.tif" via FileStream.

## Usings

```csharp
using System.Collections.Generic;
using System.IO;
using System.Windows.Media.Imaging;
```

## Code Snippet

```csharp
public static class Extensions
{
    /// <summary>
    /// An extension to convert Graphics Mill Bitmap to WPF BitmapSource
    /// </summary>
    public static BitmapSource ToBitmapSource(this Bitmap bitmap)
    {
        return BitmapFrame.Create(
            bitmap.Width,
            bitmap.Height,
            bitmap.DpiX,
            bitmap.DpiY,
            ConvertFormat(bitmap.PixelFormat),
            null,
            bitmap.Scan0,
            bitmap.Stride * bitmap.Height,
            bitmap.Stride);
    }

    /// <summary>
    /// An extension to convert WPF BitmapFrame to Graphics Mill Bitmap
    /// </summary>
    public static Bitmap ToAurigmaBitmap(this BitmapFrame bitmapFrame)
    {
        var bitmap = new Bitmap(bitmapFrame.PixelWidth, bitmapFrame.PixelHeight, ConvertFormat(bitmapFrame.Format));

        bitmap.DpiX = (float)bitmapFrame.DpiX;
        bitmap.DpiY = (float)bitmapFrame.DpiY;

        bitmapFrame.CopyPixels(new System.Windows.Int32Rect(0, 0, bitmapFrame.PixelWidth, bitmapFrame.PixelHeight), bitmap.Scan0, bitmap.Stride * bitmap.Height, bitmap.Stride);

        return bitmap;
    }

    /// <summary>
    /// Converts WPF pixel format to corresponding one for Graphics Mill.
    /// </summary>
    private static PixelFormat ConvertFormat(System.Windows.Media.PixelFormat format)
    {
        var dict = new Dictionary<System.Windows.Media.PixelFormat, Aurigma.GraphicsMill.PixelFormat>
        {
            { System.Windows.Media.PixelFormats.Bgr24, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb },
            { System.Windows.Media.PixelFormats.Bgr32, Aurigma.GraphicsMill.PixelFormat.Format32bppRgb },
            { System.Windows.Media.PixelFormats.Bgra32, Aurigma.GraphicsMill.PixelFormat.Format32bppArgb },
            { System.Windows.Media.PixelFormats.Gray8, Aurigma.GraphicsMill.PixelFormat.Format8bppGrayscale },
            { System.Windows.Media.PixelFormats.Gray16, Aurigma.GraphicsMill.PixelFormat.Format16bppGrayscale },
        };

        if (!dict.ContainsKey(format))
        {
            throw new Aurigma.GraphicsMill.UnsupportedPixelFormatException();
        }

        return dict[format];
    }

    /// <summary>
    /// Converts Graphics Mill pixel format to corresponding one for WPF.
    /// </summary>
    private static System.Windows.Media.PixelFormat ConvertFormat(Aurigma.GraphicsMill.PixelFormat format)
    {
        var dict = new Dictionary<Aurigma.GraphicsMill.PixelFormat, System.Windows.Media.PixelFormat>
        {
            { Aurigma.GraphicsMill.PixelFormat.Format24bppRgb, System.Windows.Media.PixelFormats.Bgr24 },
            { Aurigma.GraphicsMill.PixelFormat.Format32bppRgb, System.Windows.Media.PixelFormats.Bgr32 },
            { Aurigma.GraphicsMill.PixelFormat.Format32bppArgb, System.Windows.Media.PixelFormats.Bgra32 },
            { Aurigma.GraphicsMill.PixelFormat.Format8bppGrayscale, System.Windows.Media.PixelFormats.Gray8 },
            { Aurigma.GraphicsMill.PixelFormat.Format16bppGrayscale, System.Windows.Media.PixelFormats.Gray16 },
        };

        if (!dict.ContainsKey(format))
        {
            throw new Aurigma.GraphicsMill.UnsupportedPixelFormatException();
        }

        return dict[format];
    }
}

public class ConvertToWpf
{
    public static void Run()
    {
        using (var bitmap = new Bitmap("Chicago.jpg"))
        {
            var bitmapSource = bitmap.ToBitmapSource();

            var encoder = new TiffBitmapEncoder();
            encoder.Compression = TiffCompressOption.Zip;
            encoder.Frames.Add(BitmapFrame.Create(bitmapSource));

            using (var fs = new FileStream("ChicagoSavedWithWPF.tif", FileMode.Create, FileAccess.ReadWrite, FileShare.Write))
            {
                encoder.Save(fs);
            }
        }
    }
}
```

## Explanation

Below is a C# code sample that demonstrates GraphicsMill Bitmap to WPF BitmapSource conversion for encoding:

The code implements GraphicsMill to WPF pipeline using BitmapFrame.Create with direct Scan0 memory access for zero-copy pixel transfer, mapping GraphicsMill PixelFormats to WPF equivalents (Format24bppRgb→Bgr24, Format32bppArgb→Bgra32) via bidirectional dictionaries, and preserves DPI metadata. The WPF-side TiffBitmapEncoder with Zip compression enables GraphicsMill processing results to be saved in WPF-supported formats while maintaining pixel fidelity through direct memory access, supporting hybrid WPF/GraphicsMill workflows with TIFF output for archival or further WPF processing.

## Tags

- [Bitmap](<https://www.graphicsmill.com/samples/tags/bitmap_md>): Working with images via the Bitmap API
- [Interoperability](<https://www.graphicsmill.com/samples/tags/interoperability_md>): Interop with GDI+ and other libraries
- [WPF](<https://www.graphicsmill.com/samples/tags/wpf_md>): Interoperability and conversion with WPF images

## Input

- [Chicago.jpg](<https://www.graphicsmill.com/samples/Interoperability/compiled/Debug/Chicago_jpg>) (preview)

## Output

- [ChicagoSavedWithWPF.tif](<https://www.graphicsmill.com/samples/Interoperability/compiled/Debug/ChicagoSavedWithWPF_tif>) (download)

## Used APIs

- [Aurigma.GraphicsMill.Bitmap.DpiX](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_DpiX.htm.md>)
- [Aurigma.GraphicsMill.Bitmap.DpiY](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_DpiY.htm.md>)
- [Aurigma.GraphicsMill.Bitmap.PixelFormat](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_PixelFormat.htm.md>)
- [Aurigma.GraphicsMill.Bitmap.Scan0](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_Scan0.htm.md>)
- [Aurigma.GraphicsMill.Bitmap.Stride](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_Stride.htm.md>)
- [Aurigma.GraphicsMill.UnsupportedPixelFormatException](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_UnsupportedPixelFormatException.htm.md>)
