Editing 8bpp indexed Bitmaps

Ich versuche, die Pixel einer 8bpp zu bearbeiten. Da dieses PixelFormat indiziert ist, ist mir bekannt, dass es eine Farbtabelle verwendet, um die Pixelwerte abzubilden. Obwohl ich die Bitmap bearbeiten kann, indem ich sie in 24bpp konvertiere, ist die Bearbeitung mit 8bpp viel schneller (13 ms gegenüber 3 ms). Wenn Sie jedoch jeden Wert beim Zugriff auf die 8bpp-Bitmap ändern, erhalten Sie einige zufällige RGB-Farben, obwohl die PixelFormat 8bpp bleibt.

Ich entwickle gerade in C # und der Algorithmus ist wie folgt:

(C #)

1- Lade die ursprüngliche Bitmap bei 8bpp

2- Erstellen Sie ein leeres temporäres Bitmap mit 8 Bit / s und derselben Größe wie das ursprüngliche

3-LockBits beider Bitmaps und unter Verwendung von P / Invoke Aufrufen der c ++ - Methode, wobei ich den Scan0 jedes BitmapData-Objekts übergebe. (Ich habe eine c ++ - Methode verwendet, da sie beim Durchlaufen der Pixel der Bitmap eine bessere Leistung bietet.)

(C ++)

4- Erstellen Sie eine int [256] -Palette nach bestimmten Parametern und bearbeiten Sie die temporären Bitmap-Bytes, indem Sie die Pixelwerte des Originals durch die Palette leiten.

(C #)

5- UnlockBits.

Meine Frage ist, wie ich die Pixelwerte bearbeiten kann, ohne die seltsamen RGB-Farben zu haben, oder noch besser, die Farbtabelle der 8bpp-Bitmap?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage