c#: how to read parts of a file? (DICOM)

后端 未结 4 1791
[愿得一人]
[愿得一人] 2020-12-14 21:55

I would like to read a DICOM file in C#. I don\'t want to do anything fancy, I just for now would like to know how to read in the elements, but first I would actually like

4条回答
  •  忘掉有多难
    2020-12-14 22:29

    Something like this should read the file, its basic and doesn't handle all cases, but it would be a starting point:

    
    public void ReadFile(string filename)
    {
        using (FileStream fs = File.OpenRead(filename))
        {
            fs.Seek(128, SeekOrigin.Begin);
            if ((fs.ReadByte() != (byte)'D' ||
                 fs.ReadByte() != (byte)'I' ||
                 fs.ReadByte() != (byte)'C' ||
                 fs.ReadByte() != (byte)'M'))
            {
                Console.WriteLine("Not a DCM");
                return;
            }
            BinaryReader reader = new BinaryReader(fs);
    
            ushort g;
            ushort e;
            do
            {
                g = reader.ReadUInt16();
                e = reader.ReadUInt16();
    
                string vr = new string(reader.ReadChars(2));
                long length;
                if (vr.Equals("AE") || vr.Equals("AS") || vr.Equals("AT")
                    || vr.Equals("CS") || vr.Equals("DA") || vr.Equals("DS")
                    || vr.Equals("DT") || vr.Equals("FL") || vr.Equals("FD")
                    || vr.Equals("IS") || vr.Equals("LO") || vr.Equals("PN")
                    || vr.Equals("SH") || vr.Equals("SL") || vr.Equals("SS")
                    || vr.Equals("ST") || vr.Equals("TM") || vr.Equals("UI")
                    || vr.Equals("UL") || vr.Equals("US"))
                   length = reader.ReadUInt16();
                else
                {
                    // Read the reserved byte
                    reader.ReadUInt16();
                    length = reader.ReadUInt32();
                }
    
                byte[] val = reader.ReadBytes((int) length);
    
            } while (g == 2);
    
            fs.Close();
        }
    
        return ;
    }
    

    The code does not actually try and take into account that the transfer syntax of the encoded data can change after the group 2 elements, it also doesn't try and do anything with the actual values read in.

提交回复
热议问题