User class for loading and saving DICOM files
Example #1
0
		public void UpdateDicomFile(string updateFile, string dicomTag, string newValue)
		{
            try
            {
                DicomFileFormat dicomFile = new DicomFileFormat();
                DicomTag updateDicomTag = DicomTag.Parse(dicomTag);

                dicomFile.Load(updateFile, DicomReadOptions.DeferLoadingLargeElements);
                string what = updateDicomTag.Entry.ToString();

                if (updateDicomTag.Entry.ToString().StartsWith("0002"))
                {
                    dicomFile.FileMetaInfo.SetString(updateDicomTag, newValue);
                }

                else
                {
                    dicomFile.Dataset.SetString(updateDicomTag, newValue);
                }

                dicomFile.Dataset.PreloadDeferredBuffers();
                dicomFile.Save(updateFile, DicomWriteOptions.Default);
            }

            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
Example #2
0
        public void Init()
        {
            var dicomFile = new DicomFileFormat();

            dicomFile.Load(@"Testdata\CT-MONO2-16-chest", DicomReadOptions.Default);
            _instance = new DcmPixelData(dicomFile.Dataset);
        }
Example #3
0
        public void UpdateDicomFile(UpdateData updateData)
        {
            DicomFileFormat dicomFile = new DicomFileFormat();

            dicomFile.Load(updateData.DicomFileName, DicomReadOptions.DeferLoadingLargeElements);

            foreach (KeyValuePair<DicomTag, string> kvp in updateData.UpdateDataset)
            {
                dicomFile.Dataset.SetString(kvp.Key, kvp.Value);
            }

            foreach (KeyValuePair<DicomTag, string> kvp in updateData.UpdateMetadata)
            {
                dicomFile.FileMetaInfo.SetString(kvp.Key, kvp.Value);
            }

            dicomFile.Dataset.PreloadDeferredBuffers();
            dicomFile.Save(updateData.DicomFileName, DicomWriteOptions.Default);

            //if (updateData.DicomFileName != null)
            //{
            //    string path = Path.GetDirectoryName(updateData.DicomFilePath);
            //    File.Move(updateData.DicomFilePath, path + @"\" + updateData.DicomFileName);
            //}
        }
Example #4
0
        public void Setup()
        {
            var ff = new DicomFileFormat();

            ff.Load("Testdata/rtss.dcm", DicomReadOptions.DefaultWithoutDeferredLoading);
            _instances = ff.Dataset.GetSQ(DicomTags.ROIContourSequence).SequenceItems.SelectMany(
                item =>
                (item.Dataset.GetSQ(DicomTags.ContourSequence) ?? new DcmItemSequence(DicomTags.ContourSequence)).
                SequenceItems).Select(item => item.Dataset.GetDS(DicomTags.ContourData)).ToArray();
        }
Example #5
0
        public List<Dictionary<string,string>> getDicomElementInfo(string fileName, string dirPath)
        {
            try
            {
                DicomFileFormat dff = new DicomFileFormat();
                List<Dictionary<string,string>> elements = new List<Dictionary<string,string>>();
                string loadPath = dirPath + "\\" + fileName;
                dff.Load(loadPath, DicomReadOptions.DeferLoadingLargeElements);
                foreach (DcmItem di in dff.Dataset.Elements)
                {
                    Dictionary<string,string> elementData = new Dictionary<string,string>();
                    elementData.Add("Name", di.Name.ToString());
                    elementData.Add("Tag", di.Tag.ToString());
                    if (dff.Dataset.GetValueString(di.Tag) != "")
                    {
                        elementData.Add("Value", dff.Dataset.GetValueString(di.Tag));
                    }
                    else
                    {
                        elementData.Add("Value", "--Null--");
                    }
                    elements.Add(elementData);
                }

                foreach(DcmItem di in dff.FileMetaInfo.Elements)
                {
                    Dictionary<string, string> elementData = new Dictionary<string, string>();
                    elementData.Add("Name", di.Name.ToString());
                    elementData.Add("Tag", di.Tag.ToString());
                    if (dff.FileMetaInfo.GetValueString(di.Tag) != "")
                    {
                        elementData.Add("Value", dff.FileMetaInfo.GetValueString(di.Tag));
                    }
                    else
                    {
                        elementData.Add("Value", "--Null--");
                    }
                    elements.Add(elementData);
                }

                return elements;
            }
            catch (Exception e)
            {
                string error = e.ToString();
                return null;
            }
        }
Example #6
0
        private void button2_Click(object sender, EventArgs e)
        {
            /// Globals Connectivity Here
            ///
            Connection connection = null;
             try {

            connection = ConnectionContext.GetConnection();

               if (!connection.IsConnected()) {
               connection.Connect();
            }

               // Open the DICOM File

            DcmDictionary.ImportDictionary("dicom.dic");
            DcmDictionary.ImportDictionary("private.dic");

             var dcmFile = new DicomFileFormat();
             var dcmFileName = textBox1.Text.ToString();
             if (dcmFile.Load(dcmFileName, DicomReadOptions.Default) == DicomReadStatus.Success)
             {

                 var metainfos = dcmFile.FileMetaInfo.Recurse();

                 MessageBox.Show(metainfos.Count().ToString());

             }

               // Need to grab the study instance UID and that will be our Root Node

               // NodeReference studyinstanceuid = connection.CreateNodeReference("dicom");

               // studyinstanceuid.Set(".1.4.7.2.45.6.9");

               // MetaData Information to meta collection

               // DataSet Information to dataset collection

             }

             catch(Exception ee) {

                 MessageBox.Show(ee.ToString());
             }
        }
Example #7
0
        private void ScanFile(string file)
        {
            try {
                if (!DicomFileFormat.IsDicomFile(file))
                {
                    return;
                }

                DicomFileFormat ff = new DicomFileFormat();
                ff.Load(file, _stopTag, DicomReadOptions.Default);

                if (FileFound != null)
                {
                    FileFound(this, ff.Dataset, file);
                }
            } catch {
                // ignore exceptions?
            }
        }
Example #8
0
        private void UpdateImageBox(DcmImageBox imageBox, String filename, int index)
        {
            try
            {
                DicomFileFormat ff = new DicomFileFormat();
                ff.Load(filename, DicomReadOptions.DefaultWithoutDeferredLoading);
                if (ff.Dataset != null)
                {
                    ff.Dataset.ChangeTransferSyntax(DicomTransferSyntax.ImplicitVRLittleEndian, null);

                    DcmPixelData pixelData = new DcmPixelData(ff.Dataset);
                    PhotometricInterpretation pi = PhotometricInterpretation.Lookup(pixelData.PhotometricInterpretation);

                    // Grayscale only printer?
                    if (pi.IsColor == true && _supportsColorPrinting == false)
                    {
                        pixelData.Unload();
                        return;
                    }

                    // Color only printer?
                    if (pi.IsColor == false && _supportsGrayscalePrinting == false)
                    {
                        pixelData.Unload();
                        return;
                    }

                    DicomUID imageBoxSOPClassUID = null;
                    DcmItemSequence seq = null;
                    DcmItemSequenceItem item = new DcmItemSequenceItem();
                    pixelData.UpdateDataset(item.Dataset);

                    if (pi.IsColor == true)
                    {
                        imageBoxSOPClassUID = DicomUID.BasicColorImageBoxSOPClass;
                        seq = new DcmItemSequence(DicomTags.BasicColorImageSequence);
                    }
                    else
                    {
                        imageBoxSOPClassUID = DicomUID.BasicGrayscaleImageBoxSOPClass;
                        seq = new DcmItemSequence(DicomTags.BasicGrayscaleImageSequence);
                    }
                    seq.AddSequenceItem(item);
                    imageBox.Dataset.AddItem(seq);

                    pixelData.Unload();

                    imageBox.UpdateImageBox(imageBoxSOPClassUID);
                    imageBox.ImageBoxPosition = (ushort)index;
                }
            }
            catch (Exception)
            {
            }
        }
Example #9
0
File: Program.cs Project: GMZ/mdcm
        private static void Main(string[] args)
        {
            if (args.Length == 0 || args.Length > 2 ||
                (args.Length == 2 && args[0].Equals(args[1], StringComparison.InvariantCultureIgnoreCase)))
            {
                Console.WriteLine("usage: dcm2txt dcmfile-in [txtfile-out]");
                return;
            }

            var dcmFileName = args[0];

            if (!File.Exists(dcmFileName))
            {
                Console.WriteLine("dcm2txt: Specified DICOM file '{0}' does not exist or cannot be accessed.",
                                  dcmFileName);
                return;
            }

            if (File.Exists("dicom.dic"))
                DcmDictionary.ImportDictionary("dicom.dic");
            else
                DcmDictionary.LoadInternalDictionary();

            if (File.Exists("private.dic"))
                DcmDictionary.ImportDictionary("private.dic");

            string dump;
            try
            {
                var dcmFile = new DicomFileFormat();
                if (dcmFile.Load(dcmFileName, DicomReadOptions.Default) == DicomReadStatus.Success)
                {
                    var sb = new StringBuilder();

                    if (dcmFile.FileMetaInfo != null)
                        dcmFile.FileMetaInfo.Dump(sb, String.Empty, DicomDumpOptions.None);

                    if (dcmFile.Dataset != null)
                    {
                        dcmFile.Dataset.Dump(sb, String.Empty, DicomDumpOptions.None);
                    }
                    else
                    {
                        Console.WriteLine("dcm2txt: Missing dataset in DICOM file '{0}'.", dcmFileName);
                        return;
                    }
                    dump = sb.ToString();
                }
                else
                {
                    Console.WriteLine("dcm2txt: '{0}' does not appear to be a DICOM file.", dcmFileName);
                    return;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("dcm2txt: Dumping DICOM file to text failed, reason: {0}.", e.Message);
                return;
            }

            try
            {
                if (args.Length == 2)
                {
                    var txtFileName = args[1];
                    File.WriteAllText(txtFileName, dump);
                }
                else
                {
                    Console.Write(dump);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("dcm2txt: Writing DICOM dump to file/console failed, reason: {0}.", e.Message);
            }
        }
Example #10
0
        private static void CheckDICOMFile(FileInfo FI, TextWriter output, List<DicomTag> DicomTagsToCheck, Dictionary<DicomTag, List<String>> tagTovalues)
        {
            //output.WriteLine("Checking: " + FI.FullName);

            var dcmFile = new DicomFileFormat();
            var dcmFileName = FI.FullName;
            if (dcmFile.Load(dcmFileName, DicomReadOptions.Default) == DicomReadStatus.Success)
            {
                var sb = new StringBuilder();

                if (dcmFile.Dataset != null)
                {
                    foreach(var DT in DicomTagsToCheck) {
                        var Element = dcmFile.Dataset.GetElement(DT);

                        if (Element != null)
                        {
                            var ElementValue = Element.GetValueString();
                            if (ElementValue != null && ElementValue.Length != 0)
                            {
                                //output.WriteLine(Element + " = " + ElementValue);
                                addValue(tagTovalues, DT, ElementValue);
                            }
                        }
                    }

                }
                else
                {
                    Console.WriteLine("dcm2txt: Missing dataset in DICOM file '{0}'.", dcmFileName);

                    return;
                }

                //output.WriteLine(sb.ToString());
            }
            else
            {
                Console.WriteLine("dcm2txt: '{0}' does not appear to be a DICOM file.", dcmFileName);
                return;
            }
        }
Example #11
0
        private bool ProcessPDataTF(PDataTF pdu)
        {
            try {
                byte pcid = 0;
                foreach (PDV pdv in pdu.PDVs) {
                    pcid = pdv.PCID;
                    if (pdv.IsCommand) {
                        if (_dimse.CommandData == null)
                            _dimse.CommandData = new ChunkStream();

                        _dimse.CommandData.AddChunk(pdv.Value);

                        if (_dimse.Command == null) {
                            _dimse.Command = new DcmCommand();
                        }

                        if (_dimse.CommandReader == null) {
                            _dimse.CommandReader = new DicomStreamReader(_dimse.CommandData);
                            _dimse.CommandReader.Dataset = _dimse.Command;
                        }

                        _dimse.CommandReader.Read(null, DicomReadOptions.Default);

                        _dimse.Progress.BytesTransfered += pdv.Value.Length;
                        _dimse.Progress.EstimatedCommandLength = (int)_dimse.CommandReader.BytesEstimated;

                        if (pdv.IsLastFragment) {
                            _dimse.CloseCommand();

                            bool isLast = true;
                            if (_dimse.Command.Contains(DicomTags.DataSetType)) {
                                if (_dimse.Command.GetUInt16(DicomTags.DataSetType, 0x0101) != 0x0101) {
                                    isLast = false;

                                    DcmCommandField commandField = (DcmCommandField)_dimse.Command.GetUInt16(DicomTags.CommandField, 0);
                                    if (commandField == DcmCommandField.CStoreRequest) {
                                        ushort messageID = _dimse.Command.GetUInt16(DicomTags.MessageID, 1);
                                        DcmPriority priority = (DcmPriority)_dimse.Command.GetUInt16(DicomTags.Priority, 0);
                                        DicomUID affectedInstance = _dimse.Command.GetUID(DicomTags.AffectedSOPInstanceUID);
                                        string moveAE = _dimse.Command.GetString(DicomTags.MoveOriginatorApplicationEntityTitle, null);
                                        ushort moveMessageID = _dimse.Command.GetUInt16(DicomTags.MoveOriginatorMessageID, 1);
                                        OnPreReceiveCStoreRequest(pcid, messageID, affectedInstance, priority,
                                            moveAE, moveMessageID, out _dimse.DatasetFile);

                                        if (_dimse.DatasetFile != null) {
                                            DcmPresContext pres = Associate.GetPresentationContext(pcid);

                                            DicomFileFormat ff = new DicomFileFormat();
                                            ff.FileMetaInfo.FileMetaInformationVersion = DcmFileMetaInfo.Version;
                                            ff.FileMetaInfo.MediaStorageSOPClassUID = pres.AbstractSyntax;
                                            ff.FileMetaInfo.MediaStorageSOPInstanceUID = affectedInstance;
                                            ff.FileMetaInfo.TransferSyntax = pres.AcceptedTransferSyntax;
                                            ff.FileMetaInfo.ImplementationClassUID = Implementation.ClassUID;
                                            ff.FileMetaInfo.ImplementationVersionName = Implementation.Version;
                                            ff.FileMetaInfo.SourceApplicationEntityTitle = Associate.CalledAE;
                                            ff.Save(_dimse.DatasetFile, DicomWriteOptions.Default);

                                            _dimse.DatasetFileStream = new FileStream(_dimse.DatasetFile, FileMode.Open);
                                            _dimse.DatasetFileStream.Seek(0, SeekOrigin.End);
                                            _dimse.DatasetStream = _dimse.DatasetFileStream;
                                        }
                                    }
                                }
                            }
                            if (isLast) {
                                if (_dimse.IsNewDimse)
                                    OnReceiveDimseBegin(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                                OnReceiveDimseProgress(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                                OnReceiveDimse(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                                ProcessDimse(pcid);
                                _dimse = null;
                                return true;
                            }
                        }
                    } else {
                        if (_dimse.DatasetFile != null) {
                            long pos = _dimse.DatasetFileStream.Position;
                            _dimse.DatasetFileStream.Seek(0, SeekOrigin.End);
                            _dimse.DatasetFileStream.Write(pdv.Value, 0, pdv.Value.Length);
                            _dimse.DatasetFileStream.Position = pos;
                        } else {
                            if (_dimse.DatasetData == null) {
                                _dimse.DatasetData = new ChunkStream();
                                _dimse.DatasetStream = _dimse.DatasetData;
                            }
                            _dimse.DatasetData.AddChunk(pdv.Value);
                        }

                        if (_dimse.Dataset == null) {
                            DicomTransferSyntax ts = _assoc.GetAcceptedTransferSyntax(pdv.PCID);
                            _dimse.Dataset = new DcmDataset(ts);
                        }

                        if ((EnableStreamParse && !_dimse.Dataset.InternalTransferSyntax.IsDeflate) || pdv.IsLastFragment) {
                            if (_dimse.DatasetReader == null) {
                                if (_dimse.Dataset.InternalTransferSyntax.IsDeflate) {
                                    // DicomStreamReader needs a seekable stream
                                    MemoryStream ms = StreamUtility.Deflate(_dimse.DatasetStream, false);
                                    _dimse.DatasetReader = new DicomStreamReader(ms);
                                }
                                else
                                    _dimse.DatasetReader = new DicomStreamReader(_dimse.DatasetStream);
                                _dimse.DatasetReader.Dataset = _dimse.Dataset;
                            }

                            _dimse.Progress.BytesTransfered += pdv.Value.Length;

                            long remaining = _dimse.DatasetReader.BytesRemaining + pdv.Value.Length;
                            if (remaining >= _dimse.DatasetReader.BytesNeeded || pdv.IsLastFragment) {
                                if (_dimse.DatasetReader.Read(null, DicomReadOptions.Default) != DicomReadStatus.Success && pdv.IsLastFragment) {
                                    // ???
                                }

                                _dimse.Progress.EstimatedDatasetLength = (int)_dimse.DatasetReader.BytesEstimated;
                            }
                        }

                        if (pdv.IsLastFragment) {
                            _dimse.Close();

                            if (_dimse.IsNewDimse)
                                OnReceiveDimseBegin(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                            OnReceiveDimseProgress(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                            OnReceiveDimse(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                            ProcessDimse(pcid);
                            _dimse = null;
                            return true;
                        }
                    }
                }

                if (_dimse.IsNewDimse) {
                    OnReceiveDimseBegin(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                    _dimse.IsNewDimse = false;
                } else {
                    OnReceiveDimseProgress(pcid, _dimse.Command, _dimse.Dataset, _dimse.Progress);
                }

                return true;
            } catch (Exception e) {
            #if DEBUG
                Log.Error("{0} -> Error reading DIMSE: {1}", LogID, e.ToString());
            #else
                Log.Error("{0} -> Error reading DIMSE: {1}", LogID, e.ToString());//e.Message);
            #endif
                _dimse.Abort();
                _dimse = null;
                return false;
            }
        }
Example #12
0
        private void OnClickPixelDataMD5(object sender, EventArgs e)
        {
            if (_selected == -1)
                return;

            try {
                DicomFileFormat ff = new DicomFileFormat();
                ff.Load(_files[_selected], DicomReadOptions.Default |
                        DicomReadOptions.KeepGroupLengths |
                        DicomReadOptions.DeferLoadingLargeElements |
                        DicomReadOptions.DeferLoadingPixelData);

                DcmPixelData pixels = new DcmPixelData(ff.Dataset);

                if (pixels.NumberOfFrames == 0) {
                    MessageBox.Show(this, "No pixel data", "Pixel Data MD5");
                } else if (pixels.NumberOfFrames >= 1) {
                    MessageBox.Show(this, pixels.ComputeMD5(), String.Format("Pixel Data MD5 [{0} frames]", pixels.NumberOfFrames));
                }

                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
            } catch {
            }
        }
Example #13
0
 private TreeModel LoadFileFormat(DicomFileFormat ff)
 {
     TreeModel model = new TreeModel();
     LoadDataset(ff.FileMetaInfo, model.Nodes);
     LoadDataset(ff.Dataset, model.Nodes);
     return model;
 }
Example #14
0
        private void SaveDimseToFile(DcmDataset dataset)
        {
            var now = DateTime.Now;

            Trace.WriteLine(String.Format("{0} Receive DIMSE {1} from {2} ", now, dataset.GetString(DicomTags.Modality, "UN"), this.Associate.CallingAE));
            ImageCountOnConnection++;

            bool isFiltered = IsFilteredOutData(dataset);

            if (isFiltered && !Settings.Default.ReceiveFilter_Keep)
                return;

            var fileName = GetFileNameForDicomDataset(dataset);
            string filePath;

            if (!isFiltered)
            {
                filePath = DefineStorageLocationOfFile(fileName);
            }
            else
            {
                filePath = Path.Combine(Settings.Default.ReceiveFilter_Folder, fileName);
            }

            Trace.WriteLine(String.Format("{0} Saving DIMSE {1} from {2} to {3} ", now, dataset.GetString(DicomTags.Modality, "UN"), this.Associate.CallingAE, filePath));

            var ff = new DicomFileFormat(dataset);
            ff.Save( filePath, DicomWriteOptions.Default);
        }
Example #15
0
        private void ScanFile(string file)
        {
            try {
                if (!DicomFileFormat.IsDicomFile(file))
                    return;

                DicomFileFormat ff = new DicomFileFormat();
                ff.Load(file, _stopTag, DicomReadOptions.Default);

                if (FileFound != null)
                    FileFound(this, ff.Dataset, file);
            } catch {
                // ignore exceptions?
            }
        }
 private int getSeriesNumberFromDcm(string dcmFile)
 {
     int seriesNumber;
     DicomFileFormat fileRead = new DicomFileFormat();
     fileRead.Load(dcmFile, DicomReadOptions.DeferLoadingLargeElements);
     seriesNumber = Convert.ToInt32(fileRead.Dataset.GetValueString(new DicomTag(DicomConstTags.SeriesNumber)));
     fileRead = null;
     return seriesNumber;
 }
Example #17
0
        private bool LoadFile(string file)
        {
            bool success = false;
            DicomFileFormat ff = new DicomFileFormat();
            try {
                ClearDump();

                ff.Load(file, DicomReadOptions.Default | DicomReadOptions.KeepGroupLengths);

                success = true;
            }
            catch (Exception e) {
                MessageBox.Show(e.Message + "\n\n" + file, "Error parsing file!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            treeDump.Model = LoadFileFormat(ff);
            treeDump.ExpandAll();

            if (success) {
                if (ff.Dataset.Contains(DicomTags.PixelData)) {
                    tsbViewImage.Enabled = true;
                    tsbExtractPixels.Enabled = true;
                    tsbPixelDataMD5.Enabled = true;
                }
                tsbSaveTS.Enabled = true;
            } else {
                tsbViewImage.Enabled = false;
                tsbExtractPixels.Enabled = false;
                tsbSaveTS.Enabled = false;
                tsbPixelDataMD5.Enabled = false;
            }

            return success;
        }
Example #18
0
 public void Setup()
 {
     var ff = new DicomFileFormat();
     ff.Load("Testdata/rtss.dcm", DicomReadOptions.DefaultWithoutDeferredLoading);
     _instances = ff.Dataset.GetSQ(DicomTags.ROIContourSequence).SequenceItems.SelectMany(
         item =>
         (item.Dataset.GetSQ(DicomTags.ContourSequence) ?? new DcmItemSequence(DicomTags.ContourSequence)).
             SequenceItems).Select(item => item.Dataset.GetDS(DicomTags.ContourData)).ToArray();
 }
Example #19
0
        private void OnClickExtractPixels(object sender, EventArgs e)
        {
            if (_selected == -1)
                return;

            try {
                DicomFileFormat ff = new DicomFileFormat();
                ff.Load(_files[_selected], DicomReadOptions.Default |
                        DicomReadOptions.KeepGroupLengths |
                        DicomReadOptions.DeferLoadingLargeElements |
                        DicomReadOptions.DeferLoadingPixelData);

                DcmPixelData pixels = new DcmPixelData(ff.Dataset);

                if (pixels.NumberOfFrames == 0)
                    return;
                else if (pixels.NumberOfFrames >= 1) {
                    SaveFileDialog sfd = new SaveFileDialog();
                    sfd.RestoreDirectory = true;
                    if (sfd.ShowDialog(this) == DialogResult.OK) {
                        byte[] data = pixels.GetFrameDataU8(0);
                        File.WriteAllBytes(sfd.FileName, data);
                    }
                }

                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
            }
            catch {
            }
        }
Example #20
0
 public void Init()
 {
     var dicomFile = new DicomFileFormat();
     dicomFile.Load(@"Testdata\CT-MONO2-16-chest", DicomReadOptions.Default);
     _instance = new DcmPixelData(dicomFile.Dataset);
 }
Example #21
0
        private void OnClickSaveWithTransferSyntax(object sender, EventArgs e)
        {
            if (_selected == -1)
                return;

            TransferSyntaxForm tsForm = new TransferSyntaxForm();
            if (tsForm.ShowDialog(this) == DialogResult.OK) {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.RestoreDirectory = true;
                if (sfd.ShowDialog(this) == DialogResult.OK) {
                    DicomFileFormat ff = new DicomFileFormat();
                    ff.Load(_files[_selected], DicomReadOptions.Default);
                    if (tsForm.SelectedTransferSyntax != null)
                        ff.ChangeTransferSytnax(tsForm.SelectedTransferSyntax, null);
                    ff.Save(sfd.FileName, DicomWriteOptions.Default);
                }
            }
        }
Example #22
0
		}

		/// <summary>Width of image in pixels</summary>
		public int Width {
			get { return _pixelData.Width; }
		}

		/// <summary>Height of image in pixels</summary>
Example #23
0
        private void SaveDimseToFile(DcmDimseInfo dimse, byte pcid, string fileName)
        {
            string path = Path.GetFullPath(fileName);
            for (int i = 1; File.Exists(path); i++) {
                path = Path.GetFullPath(fileName);
                string ext = Path.GetExtension(path);
                path = path.Substring(0, path.Length - ext.Length);
                path += String.Format(" ({0})", i);
                path += ext;
            }

            if (String.IsNullOrEmpty(dimse.DatasetFile)) {
                DcmPresContext pres = Associate.GetPresentationContext(pcid);

                DicomFileFormat ff = new DicomFileFormat();
                ff.FileMetaInfo.FileMetaInformationVersion = DcmFileMetaInfo.Version;
                ff.FileMetaInfo.MediaStorageSOPClassUID = pres.AbstractSyntax;
                ff.FileMetaInfo.MediaStorageSOPInstanceUID = dimse.Command.AffectedSOPInstanceUID;
                ff.FileMetaInfo.TransferSyntax = pres.AcceptedTransferSyntax;
                ff.FileMetaInfo.ImplementationClassUID = Implementation.ClassUID;
                ff.FileMetaInfo.ImplementationVersionName = Implementation.Version;
                ff.FileMetaInfo.SourceApplicationEntityTitle = Associate.CalledAE;
                ff.Save(fileName, DicomWriteOptions.Default);
            }

            long pos = dimse.DatasetStream.Position;

            using (FileStream fs = File.OpenWrite(fileName)) {
                fs.Seek(0, SeekOrigin.End);
                dimse.DatasetStream.Seek(0, SeekOrigin.Begin);
                StreamUtility.Copy(dimse.DatasetStream, fs);
            }

            dimse.DatasetStream.Position = pos;
        }
Example #24
0
        public string MakeGreyDicom(byte[] greybytes, ushort imgwidth, ushort imgheight)
        {
            DcmUID studyUid = DcmUID.Generate();
            DcmUID seriesUid = DcmUID.Generate(studyUid, 1);
            DcmUID instUid = DcmUID.Generate(seriesUid, 1);
            DcmDataset data = new DcmDataset(DcmTS.ExplicitVRBigEndian);//.ImplicitVRLittleEndian  ok
            data.AddElementWithValue(DcmTags.SOPClassUID, DcmUIDs.CTImageStorage);//ComputedRadiographyImageStorage  ok
            //data.AddElementWithValue(DcmTags.SOPClassUID, DcmUIDs .SecondaryCapture);
            data.AddElementWithValue(DcmTags.StudyInstanceUID, studyUid);
            data.AddElementWithValue(DcmTags.SeriesInstanceUID, seriesUid);
            data.AddElementWithValue(DcmTags.SOPInstanceUID, instUid);//"1.3.6.1.4.1.30071.6.635719267134010719.1.1"

            //data.AddElementWithValue(DcmTags.MediaStorageSOPClassUID, DcmUIDs.ImplicitVRLittleEndian);
            //data.AddElementWithValueString(DcmTags.MediaStorageSOPClassUID, DcmUIDs.ComputedRadiographyImageStorage.ToString());

            //type 2 attributes
            ////data.AddElement(DcmTags.PrinterStatus);
            if (tags.ContainsKey("0010,0020"))
                data.AddElementWithValueString(DcmTags.PatientID, tags["0010,0020"].Substring(5));
            if (tags.ContainsKey("0010,0010"))
                data.AddElementWithValueString(DcmTags.PatientsName, tags["0010,0010"].Substring(5));
            if (tags.ContainsKey("0010,0030"))
                data.AddElementWithValueString(DcmTags.PatientsBirthDate, tags["0010,0030"].Substring(5));
            if (tags.ContainsKey("0010,0040"))
                data.AddElementWithValueString(DcmTags.PatientsSex, tags["0010,0040"].Substring(5));
            if (tags.ContainsKey("0010,1010"))
                data.AddElementWithValueString(DcmTags.PatientsAge, tags["0010,1010"].Substring(5));

            if (tags.ContainsKey("0008,0005"))
                data.AddElementWithValueString(DcmTags.SpecificCharacterSet, tags["0008,0005"].Substring(5));
            if (tags.ContainsKey("0008,0008"))
                data.AddElementWithValueString(DcmTags.ImageType, tags["0008,0008"].Substring(5));
            //if (tags.ContainsKey("0008,0016"))
            //    data.AddElementWithValueString(DcmTags.ContentTime, DateTime.Now.ToString());
            //if (tags.ContainsKey("0008,0018"))
            //    data.AddElementWithValueString(DcmTags.ContentTime, DateTime.Now.ToString());
            if (tags.ContainsKey("0008,0020"))
                data.AddElementWithValueString(DcmTags.StudyDate, tags["0008,0020"].Substring(5));
            if (tags.ContainsKey("0008,0021"))
                data.AddElementWithValueString(DcmTags.SeriesDate, tags["0008,0021"].Substring(5));
            if (tags.ContainsKey("0008,0022"))
                data.AddElementWithValueString(DcmTags.AcquisitionDate, tags["0008,0022"].Substring(5));
            if (tags.ContainsKey("0008,0023"))
                data.AddElementWithValueString(DcmTags.ContentDate, tags["0008,0023"].Substring(5));
            if (tags.ContainsKey("0008,002a"))
                data.AddElementWithValueString(DcmTags.AcquisitionDateTime, tags["0008,002a"].Substring(5));
            if (tags.ContainsKey("0008,0030"))
                data.AddElementWithValueString(DcmTags.StudyTime, tags["0008,0030"].Substring(5));
            if (tags.ContainsKey("0008,0031"))
                data.AddElementWithValueString(DcmTags.SeriesTime, tags["0008,0031"].Substring(5));
            if (tags.ContainsKey("0008,0032"))
                data.AddElementWithValueString(DcmTags.AcquisitionTime, tags["0008,0032"].Substring(5));
            if (tags.ContainsKey("0008,0033"))
                data.AddElementWithValueString(DcmTags.ContentTime, tags["0008,0033"].Substring(5));

            if (tags.ContainsKey("0008,0050"))
                data.AddElementWithValueString(DcmTags.AcquisitionNumber, tags["0008,0050"].Substring(5));
            if (tags.ContainsKey("0008,0060"))
                data.AddElementWithValueString(DcmTags.Modality, tags["0008,0060"].Substring(5));
            if (tags.ContainsKey("0008,0070"))
                data.AddElementWithValueString(DcmTags.Manufacturer, tags["0008,0070"].Substring(5));
            if (tags.ContainsKey("0008,0080"))
                data.AddElementWithValueString(DcmTags.InstitutionName, tags["0008,0080"].Substring(5));
            if (tags.ContainsKey("0008,0081"))
                data.AddElementWithValueString(DcmTags.InstitutionAddress, tags["0008,0081"].Substring(5));
            if (tags.ContainsKey("0008,0090"))
                data.AddElementWithValueString(DcmTags.ReferringPhysiciansName, tags["0008,0090"].Substring(5));
            if (tags.ContainsKey("0008,1010"))
                data.AddElementWithValueString(DcmTags.StationName, tags["0008,1010"].Substring(5));
            if (tags.ContainsKey("0008,1030"))
                data.AddElementWithValueString(DcmTags.StudyDescription, tags["0008,1030"].Substring(5));
            if (tags.ContainsKey("0008,103e"))
                data.AddElementWithValueString(DcmTags.SeriesDescription, tags["0008,103e"].Substring(5));
            if (tags.ContainsKey("0008,1090"))
                data.AddElementWithValueString(DcmTags.ManufacturersModelName, tags["0008,1090"].Substring(5));

            if (tags.ContainsKey("0018,0010"))
                data.AddElementWithValueString(DcmTags.ContrastBolusAgent, tags["0018,0010"].Substring(5));
            if (tags.ContainsKey("0018,0015"))
                data.AddElementWithValueString(DcmTags.BodyPartExamined, tags["0018,0015"].Substring(5));
            if (tags.ContainsKey("0018,0050"))
                data.AddElementWithValueString(DcmTags.SliceThickness, tags["0018,0050"].Substring(5));
            if (tags.ContainsKey("0018,0060"))
                data.AddElementWithValueString(DcmTags.KVP, tags["0018,0060"].Substring(5));
            if (tags.ContainsKey("0018,0090"))
                data.AddElementWithValueString(DcmTags.DataCollectionDiameter, tags["0018,0090"].Substring(5));
            if (tags.ContainsKey("0018,1000"))
                data.AddElementWithValueString(DcmTags.DeviceSerialNumber, tags["0018,1000"].Substring(5));
            if (tags.ContainsKey("0018,1020"))
                data.AddElementWithValueString(DcmTags.SoftwareVersions, tags["0018,1020"].Substring(5));
            if (tags.ContainsKey("0018,1030"))
                data.AddElementWithValueString(DcmTags.ProtocolName, tags["0018,1030"].Substring(5));
            if (tags.ContainsKey("0018,1041"))
                data.AddElementWithValueString(DcmTags.ContrastBolusVolume, tags["0018,1041"].Substring(5));
            if (tags.ContainsKey("0018,1042"))
                data.AddElementWithValueString(DcmTags.ContrastBolusStartTime, tags["0018,1042"].Substring(5));
            if (tags.ContainsKey("0018,1043"))
                data.AddElementWithValueString(DcmTags.ContrastBolusStopTime, tags["0018,1043"].Substring(5));
            if (tags.ContainsKey("0018,1044"))
                data.AddElementWithValueString(DcmTags.ContrastBolusTotalDose, tags["0018,1044"].Substring(5));
            if (tags.ContainsKey("0018,1046"))
                data.AddElementWithValueString(DcmTags.ContrastFlowRate, tags["0018,1046"].Substring(5));
            if (tags.ContainsKey("0018,1047"))
                data.AddElementWithValueString(DcmTags.ContrastFlowDuration, tags["0018,1047"].Substring(5));
            if (tags.ContainsKey("0018,1049"))
                data.AddElementWithValueString(DcmTags.ContrastBolusIngredientConcentration, tags["0018,1049"].Substring(5));
            if (tags.ContainsKey("0018,1100"))
                data.AddElementWithValueString(DcmTags.ReconstructionDiameter, tags["0018,1100"].Substring(5));
            if (tags.ContainsKey("0018,1110"))
                data.AddElementWithValueString(DcmTags.DistanceSourceToDetector, tags["0018,1110"].Substring(5));
            if (tags.ContainsKey("0018,1111"))
                data.AddElementWithValueString(DcmTags.DistanceSourceToPatient, tags["0018,1111"].Substring(5));
            if (tags.ContainsKey("0018,1120"))
                data.AddElementWithValueString(DcmTags.GantryDetectorTilt, tags["0018,1120"].Substring(5));
            if (tags.ContainsKey("0018,1130"))
                data.AddElementWithValueString(DcmTags.TableHeight, tags["0018,1130"].Substring(5));
            if (tags.ContainsKey("0018,1140"))
                data.AddElementWithValueString(DcmTags.RotationDirection, tags["0018,1140"].Substring(5));
            if (tags.ContainsKey("0018,1150"))
                data.AddElementWithValueString(DcmTags.ExposureTime, tags["0018,1150"].Substring(5));
            if (tags.ContainsKey("0018,1151"))
                data.AddElementWithValueString(DcmTags.XRayTubeCurrent, tags["0018,1151"].Substring(5));
            if (tags.ContainsKey("0018,1152"))
                data.AddElementWithValueString(DcmTags.Exposure, tags["0018,1152"].Substring(5));
            if (tags.ContainsKey("0018,1160"))
                data.AddElementWithValueString(DcmTags.FilterType, tags["0018,1160"].Substring(5));
            if (tags.ContainsKey("0018,1170"))
                data.AddElementWithValueString(DcmTags.GeneratorPower, tags["0018,1170"].Substring(5));
            if (tags.ContainsKey("0018,1190"))
                data.AddElementWithValueString(DcmTags.FocalSpots, tags["0018,1190"].Substring(5));
            if (tags.ContainsKey("0018,1200"))
                data.AddElementWithValueString(DcmTags.DateOfLastCalibration, tags["0018,1200"].Substring(5));
            if (tags.ContainsKey("0018,1201"))
                data.AddElementWithValueString(DcmTags.TimeOfLastCalibration, tags["0018,1201"].Substring(5));
            if (tags.ContainsKey("0018,1210"))
                data.AddElementWithValueString(DcmTags.ConvolutionKernel, tags["0018,1210"].Substring(5));
            if (tags.ContainsKey("0018,5100"))
                data.AddElementWithValueString(DcmTags.PatientPosition, tags["0018,5100"].Substring(5));

            //if (tags.ContainsKey("0020,000D"))
            //    data.AddElementWithValueString(DcmTags.ContrastBolusStopTime, DateTime.Now.ToString());
            //if (tags.ContainsKey("0020,000E"))
            //    data.AddElementWithValueString(DcmTags.ContrastBolusStopTime, DateTime.Now.ToString());
            if (tags.ContainsKey("0020,0010"))
                data.AddElementWithValueString(DcmTags.StudyID, tags["0020,0010"].Substring(5));
            if (tags.ContainsKey("0020,0011"))
                data.AddElementWithValueString(DcmTags.SeriesNumber, tags["0020,0011"].Substring(5));
            if (tags.ContainsKey("0020,0012"))
                data.AddElementWithValueString(DcmTags.AccessionNumber, tags["0020,0012"].Substring(5));
            if (tags.ContainsKey("0020,0013"))
                data.AddElementWithValueString(DcmTags.InstanceNumber, tags["0020,0013"].Substring(5));
            if (tags.ContainsKey("0020,0032"))
                data.AddElementWithValueString(DcmTags.ImagePositionPatient, tags["0020,0032"].Substring(5));
            if (tags.ContainsKey("0020,0037"))
                data.AddElementWithValueString(DcmTags.ImageOrientationPatient, tags["0020,0037"].Substring(5));
            if (tags.ContainsKey("0020,0052"))
                data.AddElementWithValueString(DcmTags.FrameOfReferenceUID, tags["0020,0052"].Substring(5));
            if (tags.ContainsKey("0020,1040"))
                data.AddElementWithValueString(DcmTags.PositionReferenceIndicator, tags["0020,1040"].Substring(5));
            if (tags.ContainsKey("0020,1041"))
                data.AddElementWithValueString(DcmTags.SliceLocation, tags["0020,1041"].Substring(5));
            if (tags.ContainsKey("0020,4000"))
                data.AddElementWithValueString(DcmTags.ImageComments, tags["0020,4000"].Substring(5));

            //data.AddElementWithValueString(DcmTags.StudyTime, DateTime.Now.ToString());
            //data.AddElementWithValueString(DcmTags.AccessionNumber, "");
            //data.AddElementWithValueString(DcmTags.ReferringPhysiciansName, "");
            //data.AddElementWithValueString(DcmTags.StudyID, "1");
            //data.AddElementWithValueString(DcmTags.SeriesNumber, "1");
            //data.AddElementWithValueString(DcmTags.ModalitiesInStudy, "CT");//CR
            //data.AddElementWithValueString(DcmTags.Modality, "CT");//CR
            //data.AddElementWithValueString(DcmTags.NumberOfStudyRelatedInstances, "1");
            //data.AddElementWithValueString(DcmTags.NumberOfStudyRelatedSeries, "1");
            //data.AddElementWithValueString(DcmTags.NumberOfSeriesRelatedInstances, "1");
            //data.AddElementWithValueString(DcmTags.PatientOrientation, "HFS");//F/A
            //data.AddElementWithValueString(DcmTags.ImageLaterality, "U");
            if (tags.ContainsKey("0028,1050"))
                data.AddElementWithValueString(DcmTags.WindowCenter, "1113");
            if (tags.ContainsKey("0028,1051"))
                data.AddElementWithValueString(DcmTags.WindowWidth, "749");
            //data.AddElementWithValueString(DcmTags.WindowCenterWidthExplanation, "WINDOW1\\WINDOW2");
            data.AddElementWithValueString(DcmTags.PixelRepresentation, "0");
            data.AddElementWithValueString(DcmTags.RescaleIntercept, "0");//0
            data.AddElementWithValueString(DcmTags.RescaleSlope, "1");
            //data.AddElementWithValueString(DcmTags.RotationDirection, "CW");
            //ushort bitdepth = 2;未使用过

            DcmPixelData pixelData = new DcmPixelData(DcmTS.ImplicitVRLittleEndian);

            pixelData.PixelRepresentation = 0;//ok
            pixelData.ImageWidth = imgwidth;
            pixelData.ImageHeight = imgheight;

            pixelData.SamplesPerPixel = 1;//ok
            pixelData.HighBit = 15;//ok
            pixelData.BitsStored = 16;//ok
            pixelData.BitsAllocated = 16;//ok
            //pixelData.SamplesPerPixel = 1;
            //pixelData.HighBit = 7;
            //pixelData.BitsStored = 8;
            //pixelData.BitsAllocated = 8;
            pixelData.ImageType = "ORIGINAL\\PRIMARY\\AXIAL";
            pixelData.PhotometricInterpretation = "MONOCHROME2";//2 byte gray? //ok

            //pixelData.FragmentSize
            //pixelData.IsLossy = true;
            //pixelData.LossyCompressionMethod = "01";
            pixelData.PixelDataElement = DcmElement.Create(DcmTags.PixelData, DcmVR.OW); //OB: Other Byte, OW: Other Word

            //pixelData.AddFrame(bmpBytes);
            pixelData.AddFrame(greybytes);

            pixelData.UpdateDataset(data);
            DicomFileFormat ff = new DicomFileFormat(data);
            //string fileout = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "greyimg_test.dcm");
            ff.Save(fileout, Dicom.DicomWriteOptions.Default);//Default
            ff = null;
            return fileout;
        }