16 ビット DICOM 画像 (16 ビット DIB としてメモリに読み込まれる) でウィンドウ レベリングを実行するコードを書いています。私のウィンドウ レベリング コードは完成しており、ソース ピクセル値を目的の最終ピクセル値にマップするルックアップ テーブルを生成することによって機能します。
よくわからないのは、このルックアップ テーブルを画像に適用する方法です。BITMAPINFO オブジェクトには、RGBQUAD[] タイプの「bmiColors」フィールドがあることがわかります。ルックアップ テーブルをこのプロパティに割り当てようとしましたが、効果がないようです。SetDIBColorTable 関数も試してみましたが、画面出力には何の影響もないようです。
私がやろうとしていること (ピクセル データ自体を変更するのではなく、ペイント中にルックアップ テーブルを適用する) は GDI でもサポートされていますか、実際にはピクセル データ自体をループしてピクセル値を 1 つずつ変更することになっていますか?
また、BitBlt 関数を使用するか SetDIBitsToDevice 関数を使用するかに違いはないようです。ここではどちらも同じように振る舞う傾向があります。
私が望むものを達成するのがより簡単であれば、私は DirectX を使用することにオープンです。私は以前にそれを使用したことがないので、サンプルコードが回答として提供されればいいでしょう。
私のコードはパフォーマンスが非常に重要であるため、より多くの労力/コードが必要になる場合でも、これを達成するための最速の方法を探しています。