生の画像データを含むファイルがあります。すべてのピクセルは値として表され16 bit (0-65536)
ます。
ushort[]
データの必要な部分を配列に読み込んでいます。画像処理を行った後、どういうわけかこの画像をユーザーに表示する必要があります。8ビットのグレースケールを描画するのに問題はありませんが(すべてのピクセルのR、G、Bの値を同じに設定するだけです)、16ビット/ピクセルのグレースケール画像を処理できません。
もう1つの可能性は、PixelFormat.Format48bppRgb
r、g、bを同じ16ビットのグラデーションに設定して使用することですが、その方法がわかりませんでした。
unsafe
codeとを使用していくつかのコードスニペットを見つけましLockBits
たが、それらを機能させることができませんでした。
8ビットにダウンスケールせずに16ビットのグレースケール画像を描画する方法はありますか?
コードスニペットを教えてください。
編集:これは私が8ビットのグラデーションを設定する方法です:
Array img;
//var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
if (bitsPerElement == 8)
{
//img = Array.CreateInstance(typeof(byte), bitmapHeigth*bitmapWidth);
img = GetLayerBytes<byte>(LayerNum) as byte[];
}
else
{
img = GetLayerBytes<UInt16>(LayerNum) as UInt16[];
}
int ind = 0;
for (int heigth = 0; heigth < bitmapHeigth; heigth++)
{
for (int width = 0; width < bitmapWidth; width++)
{
int current = Convert.ToInt32(img.GetValue(ind));
ind++;
bmp.SetPixel(width, heigth, Color.FromArgb(current, current, current));
}
}
pictureBox1.Image = bmp;