2

C# .net 3.5 で 8 ビットの png ファイルをビットマップに読み込んでいます。paint.net のような通常のプログラムで読み取ったときに、RGB 値 255,255,255、つまり白である画像上の特定のピクセルをターゲットにしています。ただし、メソッド GetPixel を介して、またはビットをロックしてポインターの方法でアクセスすると、どちらも 62,62,62 または 62 のシングルバイトカラー値のいずれかの結果が得られます。だから、私の質問は、なぜ私は255 ではなく 62 の値を取得しますか?

どんな洞察も素晴らしいでしょう:D.

4

1 に答える 1

2

画面が 16 ビットの色深度に設定されているようです。これは、各ピクセルが 16 ビット (赤 5、緑 6、青 5) で記述され、各チャネル値の範囲が 0 から 31 (2^5-1) または 63 (2^6-1) であることを意味します。白いピクセルは (31,63,31) として表され、おそらく (62,62,62) に調整されます。

Paint.Net のようなプログラムは、独自のビットマップ処理を行い、システムの Bitmap クラスに依存しないため、画面の色深度に依存しません。

したがって、画面を 32 ビットの色深度に設定してみてください。ピクセルは (255,255,255) として表されます。32 ビットの色深度では、通常 24 ビットのみがカラー チャネルに使用されることに注意してください。最後の 8 ビットはアルファ (透明度) または未使用です。

于 2013-03-28T08:28:32.703 に答える