C# Conversion de 32bpp image de 8bpp

Je suis en train de convertir un 32bpp capture d'écran de l'image à un 8bpp (ou 4bpp, ou 1bpp) format à l'aide de C#. Je l'ai déjà regardé plusieurs stackoverflow des réponses sur des sujets similaires et plus suggérer des variations en utilisant le code suivant:

public static Bitmap Convert(Bitmap oldbmp) 
{
    Bitmap newbmp = new Bitmap(oldbmp.Width, oldbmp.Height, PixelFormat.Format8bppIndexed);

    Graphics gr = Graphics.FromImage(newbmp);

    gr.PageUnit = GraphicsUnit.Pixel;
    gr.DrawImageUnscaled(oldbmp, 0, 0);

    return newbmp;
}

Cependant, lorsque cela s'exécute, j'obtiens une exception: A graphics object cannot be created from an image that has an indexed pixel format. Je comprends que 8, 4 et 1bpp images en couleurs des mappages de table plutôt que la couleur réelle des pixels eux-mêmes (comme en 32 ou 16bpp images) donc je suppose que je suis en manque quelques une étape de conversion quelque part, mais je suis assez novice en C# (venant d'un C++ arrière-plan) et que vous préférez être en mesure de faire cela en utilisant le code C# appels plutôt que de recourir à PInvoking BitBlt et GetDIBits etc. Quelqu'un capable de m'aider à résoudre ce problème? Merci.

MODIFIER: je tiens à signaler que j'ai besoin de cela pour être compatibles amont .NET framework 2.0

OriginalL'auteur binarybob | 2011-06-15