1

生の画像データを含むファイルがあります。すべてのピクセルは値として表され16 bit (0-65536)ます。

ushort[]データの必要な部分を配列に読み込んでいます。画像処理を行った後、どういうわけかこの画像をユーザーに表示する必要があります。8ビットのグレースケールを描画するのに問題はありませんが(すべてのピクセルのR、G、Bの値を同じに設定するだけです)、16ビット/ピクセルのグレースケール画像を処理できません。

もう1つの可能性は、PixelFormat.Format48bppRgbr、g、bを同じ16ビットのグラデーションに設定して使用することですが、その方法がわかりませんでした。

unsafecodeとを使用していくつかのコードスニペットを見つけまし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;
4

1 に答える 1

0

誰かが答えを探している場合に備えて、ハンス・パッサントからの引用:

これらのピクセルフォーマットはGDI+で定義されており、いつの日かディスプレイテクノロジーが十分に進歩すると役立つかもしれないと期待されています。私たちはまだそれを待っています。それは実際には逆になり、LCDパネルは24rgbフォーマットから可能なすべての1600万色を表示することができませんでした。実際に16ビット形式でグレーレベルを表示するには、病院で見られるような特殊なハードウェアと高度な訓練を受けた目が必要です。DICOMのように、一致する非標準の画像形式を使用します。これは、LeadToolsなどのベンダーから購入できます。

于 2014-03-11T08:37:05.420 に答える