1

openDicom.net を使用して dicom 画像を表示しようとしています。ここで何を修正すればよいですか?

openDicom.Image.PixelData obraz = new openDicom.Image.PixelData(file.DataSet);
// System.Drawing.Bitmap obrazek = (Bitmap)Bitmap.FromFile(element);
pictureBox1.Image = obraz;
pictureBox1.Show();
4

1 に答える 1

1

PixelData は画像ではありません。PixelData は生の画像情報です。私の経験では、ほとんどの DICOM ファイルは jpeg2000 画像を使用します。それらを PictureBox で使用できるものに変換するには、それを Image に変換する必要があります。生のモノクロ タイプの場合、次の変換を使用して System.Drawing.Bitmap にすることができます。

openDicom.Image.PixelData obraz = new openDicom.Image.PixelData(file.DataSet);

Bitmap img = new System.Drawing.Bitmap(obraz.Columns, obraz.Rows, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

int resampleval = (int)Math.Pow(2, (obraz.BitsAllocated - obraz.BitsStored));
int pxCount = 0;
int temp = 0;

try
{
    unsafe
    {
        BitmapData bd = img.LockBits(new Rectangle(0, 0, obraz.Columns, obraz.Rows), ImageLockMode.WriteOnly, img.PixelFormat);

        for (int r = 0; r < bd.Height; r++)
        {
            byte* row = (byte*)bd.Scan0 + (r * bd.Stride);

            for (int c = 0; c < bd.Width; c++)
            {
                temp = PixelData16[pxCount] / resampleval;

                while (temp > 255)
                    temp = temp / resampleval;

                row[(c * 3)] = (byte)temp;
                row[(c * 3) + 1] = (byte)temp;
                row[(c * 3) + 2] = (byte)temp;

                pxCount++;
            }
        }

        img.UnlockBits(bd);
    }
}
catch
{
    img = new Bitmap(10, 10);
}

pictureBox1.Image = img;
pictureBox1.Show();

他の画像タイプについては、適切な値で同様の変換を行う必要があります。この変換はモノクロ タイプ専用で、jpeg2000 から jpeg に変換された後にのみ行われます。jpeg2000 画像でこの操作を実行すると、画像のちょうど半分が静止画で塗りつぶされ、残りの半分が完全に空になります。

于 2010-09-08T17:17:49.033 に答える