私はDirect2Dでビットマップを描画しています。ビットマップは透明度(アルファチャンネル)を使用します。Direct2D - ビットマップでガンマ補正透過(アルファ)を行う方法
ブレンドは正しくありません。
テストとして、50%透明度の純粋な黒色のpngイメージを読み込み、白い背景の上に描きました。結果は、赤、緑、青の値が127(0x7F7F7F)のピクセルです。これは、Direct2Dのブレンドがガンマを無視し、カラー値を線形であるかのように扱うことを示唆しています。
(ビットマップでは、通常のsRGBカラースペースが使用され、32ビット/ピクセル、赤、緑、青、アルファの各ビットが8ビットです)。それらはGUID_WICPixelFormat32bppPBGRA形式で読み込まれます。
sRGBでは、黒と白の中間のブレンドは186(0xBABABA)です。これは私が望む理想的な結果です。
Direct2Dは、ガンマに関して透明性を表示できますか?どうすればいい?どんな助けもありがたい。
私はあなたがそれを後方に持っていると思います。 sRGBでは、50%が黒と白の中間(明るさで、ちょっと)のように見えます。それはあまりにも明るく見えますか暗すぎますか?これは、表示されている方法による可能性があります。 –
私の理解では、sRGB colorspaceはピクセルの強度と格納されている実際の数との間の非線形変換を定義します。すなわちガンマカーブである。 たとえば、8ビットのカラー値の範囲は0〜255ですが、ガンマカーブのため、輝度の約20%で127(途中)の値が表示されます。 したがって、ガンマ補正の50%黒と白のブレンドのピクセル値は186(フルスケールの73%)になります。だからDirect2dでは、私のブレンドは暗すぎます。 –
@astraycat黒と白のピクセルを交互に見て、それらをソリッドブロックと比較すると、BABABAブロックは適切に較正されたモニター上で同じ明るさになるはずです。較正されていないモニタでも、BABABAは7F7F7Fよりも近くにある必要があります。 –