8bpp のピクセルを編集しようとしています。この PixelFormat にはインデックスが付けられているため、カラー テーブルを使用してピクセル値をマッピングしていることを認識しています。ビットマップを 24bpp に変換して編集することもできますが、8bpp 編集の方がはるかに高速です (13ms 対 3ms)。ただし、8bpp ビットマップにアクセスするときに各値を変更すると、PixelFormat が 8bpp のままであっても、いくつかのランダムな RGB カラーが発生します。
私は現在c#で開発しており、アルゴリズムは次のとおりです。
(C#)
1- 元のビットマップを 8bpp でロード
2- 元と同じサイズの 8bpp で空の一時ビットマップを作成します。
両方のビットマップの 3-LockBits と、P/Invoke を使用して、各 BitmapData オブジェクトの Scan0 を渡す C++ メソッドを呼び出します。(ビットマップのピクセルを反復処理するときにパフォーマンスが向上するため、C++ メソッドを使用しました)
(C++)
4- いくつかのパラメーターに従って int[256] パレットを作成し、元のピクセル値をパレットに渡すことによって一時ビットマップ バイトを編集します。
(C#)
5-アンロックビット。
私の質問は、奇妙な RGB カラーを使用せずにピクセル値を編集する方法、または 8bpp ビットマップのカラー テーブルを編集する方法です。