---
title: "Process Non-RGB (System.Drawing Interop)"
canonical: https://www.graphicsmill.com/samples/Interoperability/SystemDrawingInteroperability/ProcessNonRgb_cs
product: "Graphics Mill"
source: "Interoperability/SystemDrawingInteroperability/ProcessNonRgb.cs"
---

# Process Non-RGB (System.Drawing Interop)

Loads non-RGB image with Aurigma.GraphicsMill.Bitmap, pass it to System.Drawing.Bitmap and
convert it back to Aurigma.GraphicsMill.Bitmap.

## Instruction

Write a C# program that processes non-RGB images (CMYK "Copenhagen_CMYK.jpg") for System.Drawing interop by converting to RGB (Format24bppRgb) with sRGB destination profile using ColorManagement.Convert, casting to System.Drawing.Bitmap for legacy processing (watermark), converting back to original CMYK format with source ColorProfile, preserving all metadata (EXIF, IPTC, XMP, AdobeResources), and saving via JpegWriter while properly managing temporary RGB bitmap disposal.

## Usings

```csharp
using Aurigma.GraphicsMill.Codecs;
```

## Code Snippet

```csharp
// Imagine that you have a legacy application which works with System.Drawing.Bitmap,
// and you need to work with non-RGB images. You should convert it to RGB with Graphics Mill, cast it
// to System.Drawing.Bitmap and convert back.
using (var reader = new JpegReader("Copenhagen_CMYK.jpg"))
using (var gmBitmap1 = reader.Frames[0].GetBitmap())
{
    Bitmap rgbGmBitmap = null;

    try
    {
        // Convert a non-RGB image to the RGB color space with the sRGB color profile
        if (!gmBitmap1.PixelFormat.IsRgb)
        {
            rgbGmBitmap = new Bitmap(gmBitmap1);
            rgbGmBitmap.ColorManagement.DestinationProfile = ColorProfile.FromSrgb();
            rgbGmBitmap.ColorManagement.Convert(PixelFormat.Format24bppRgb);
        }

        using (var sdBitmap = (System.Drawing.Bitmap)(gmBitmap1.PixelFormat.IsRgb ? gmBitmap1 : rgbGmBitmap))
        {
            // Here we modify System.Drawing.Bitmap
            Utils.ApplyWatermark(sdBitmap);

            using (var gmBitmap2 = (Bitmap)sdBitmap)
            {
                // Convert an RGB image to the source color space (CMYK, grayscale, or Lab)
                if (!gmBitmap1.PixelFormat.IsRgb)
                {
                    gmBitmap2.ColorProfile = ColorProfile.FromSrgb();
                    gmBitmap2.ColorManagement.DestinationProfile = gmBitmap1.ColorProfile;
                    gmBitmap2.ColorManagement.Convert(gmBitmap1.PixelFormat);
                }

                // Copy color profile
                gmBitmap2.ColorProfile = gmBitmap1.ColorProfile;

                using (var writer = new JpegWriter("ProcessNonRgb.jpg"))
                {
                    // Copy metadata
                    writer.Exif = reader.Exif;
                    writer.Iptc = reader.Iptc;
                    writer.Xmp = reader.Xmp;
                    writer.AdobeResources = reader.AdobeResources;

                    Pipeline.Run(gmBitmap2 + writer);
                }
            }
        }
    }
    finally
    {
        if (rgbGmBitmap != null)
        {
            rgbGmBitmap.Dispose();
        }
    }
}
```

## Explanation

Below is a C# code sample that enables System.Drawing processing of non-RGB images:

The code demonstrates round-trip color space conversion for System.Drawing compatibility: CMYK→sRGB RGB (24bpp) for casting to System.Drawing.Bitmap, legacy processing, then RGB→original CMYK using source ColorProfile for accurate color fidelity. It uses conditional ColorManagement.Convert pipelines with explicit DestinationProfile assignments, preserves original ColorProfile on return conversion, manually copies comprehensive metadata to JpegWriter, and implements defensive resource management with try-finally for temporary RGB bitmap disposal. This pattern enables legacy System.Drawing integration with CMYK/print workflows while maintaining color accuracy and metadata integrity.

## 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
- [Metadata](<https://www.graphicsmill.com/samples/tags/metadata_md>): Reading and writing image metadata

## Input

- [Copenhagen\_CMYK.jpg](<https://www.graphicsmill.com/samples/Interoperability/compiled/Debug/Copenhagen_CMYK_jpg>) (preview)

## Output

- [ProcessNonRgb.jpg](<https://www.graphicsmill.com/samples/Interoperability/compiled/Debug/ProcessNonRgb_jpg>) (preview)

## Used APIs

- [Aurigma.GraphicsMill.Bitmap.ColorManagement](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_ColorManagement.htm.md>)
- [Aurigma.GraphicsMill.Bitmap.ColorProfile](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_ColorProfile.htm.md>)
- [Aurigma.GraphicsMill.Bitmap.PixelFormat](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Bitmap_PixelFormat.htm.md>)
- [Aurigma.GraphicsMill.Codecs.Frame.GetBitmap](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_Codecs_Frame_GetBitmap.htm.md>)
- [Aurigma.GraphicsMill.Codecs.ImageReader.AdobeResources](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_ImageReader_AdobeResources.htm.md>)
- [Aurigma.GraphicsMill.Codecs.ImageReader.Exif](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_ImageReader_Exif.htm.md>)
- [Aurigma.GraphicsMill.Codecs.ImageReader.Frames](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_ImageReader_Frames.htm.md>)
- [Aurigma.GraphicsMill.Codecs.ImageReader.Iptc](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_ImageReader_Iptc.htm.md>)
- [Aurigma.GraphicsMill.Codecs.ImageReader.Xmp](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_ImageReader_Xmp.htm.md>)
- [Aurigma.GraphicsMill.Codecs.JpegReader](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_JpegReader.htm.md>)
- [Aurigma.GraphicsMill.Codecs.JpegWriter](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_JpegWriter.htm.md>)
- [Aurigma.GraphicsMill.Codecs.JpegWriter.AdobeResources](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_JpegWriter_AdobeResources.htm.md>)
- [Aurigma.GraphicsMill.Codecs.JpegWriter.Exif](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_JpegWriter_Exif.htm.md>)
- [Aurigma.GraphicsMill.Codecs.JpegWriter.Iptc](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_JpegWriter_Iptc.htm.md>)
- [Aurigma.GraphicsMill.Codecs.JpegWriter.Xmp](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_JpegWriter_Xmp.htm.md>)
- [Aurigma.GraphicsMill.ColorManagementProvider.Convert(PixelFormat)](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_ColorManagementProvider_Convert_1_3e209c07.htm.md>)
- [Aurigma.GraphicsMill.ColorManagementProvider.DestinationProfile](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_ColorManagementProvider_DestinationProfile.htm.md>)
- [Aurigma.GraphicsMill.ColorProfile](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_ColorProfile.htm.md>)
- [Aurigma.GraphicsMill.ColorProfile.FromSrgb](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_ColorProfile_FromSrgb.htm.md>)
- [Aurigma.GraphicsMill.PixelFormat.IsRgb](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_PixelFormat_IsRgb.htm.md>)
