コード例 #1
0
ファイル: DicomStreamReader.cs プロジェクト: evrimulgen/mdcm
        private void InsertDatasetItem(DcmItem item, DicomReadOptions options)
        {
            if (_sds.Count > 0 && _sds.Count == _sqs.Count)
            {
                DcmDataset ds = _sds.Peek();

                if (_tag.Element == 0x0000)
                {
                    if (Flags.IsSet(options, DicomReadOptions.KeepGroupLengths))
                    {
                        ds.AddItem(item);
                    }
                }
                else
                {
                    ds.AddItem(item);
                }

                if (ds.StreamLength != UndefinedLength)
                {
                    long end = ds.StreamPosition + ds.StreamLength;
                    if ((_stream.Position - _offset) >= end)
                    {
                        _sds.Pop();
                    }
                }
            }
            else
            {
                if (_tag.Element == 0x0000)
                {
                    if (Flags.IsSet(options, DicomReadOptions.KeepGroupLengths))
                    {
                        _dataset.AddItem(item);
                    }
                }
                else
                {
                    _dataset.AddItem(item);
                }
            }

            if (_tag == DicomTags.SpecificCharacterSet && item is DcmCodeString)
            {
                DcmCodeString cs = (DcmCodeString)item;
                if (cs.Length > 0)
                {
                    string[] values = cs.GetValues();
                    for (int i = 0; i < values.Length; i++)
                    {
                        if (String.IsNullOrEmpty(values[i]))
                        {
                            continue;
                        }
                        _encoding = DcmEncoding.GetEncodingForSpecificCharacterSet(values[i]);
                        break;
                    }
                }
            }
        }
コード例 #2
0
        public bool Initialize()
        {
            _dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedImageBoxSequence));

            // Set Defaults
            FilmOrientation   = FilmOrientation;
            FilmSizeID        = FilmSizeID;
            MagnificationType = MagnificationType;
            MaxDensity        = MaxDensity;
            BorderDensity     = BorderDensity;
            EmptyImageDensity = EmptyImageDensity;
            MinDensity        = MinDensity;
            Trim = Trim;
            RequestedResolutionID = RequestedResolutionID;

            string format = ImageDisplayFormat;

            if (String.IsNullOrEmpty(format))
            {
                Debug.Log.Error("No display format present in N-CREATE Basic Image Box dataset");
                return(false);
            }

            string[] parts = format.Split('\\');

            if (parts[0] == "STANDARD" && parts.Length == 2)
            {
                parts = parts[1].Split(',');
                if (parts.Length == 2)
                {
                    var col = int.Parse(parts[0]);
                    var row = int.Parse(parts[1]);
                    for (var r = 0; r < row; r++)
                    {
                        for (var c = 0; c < col; c++)
                        {
                            CreateImageBox();
                        }
                    }
                    return(true);
                }
            }

            if ((parts[0] == "ROW" || parts[0] == "COL") && parts.Length == 2)
            {
                parts = parts[1].Split(',');
                foreach (var count in parts.Select(int.Parse))
                {
                    for (var i = 0; i < count; i++)
                    {
                        CreateImageBox();
                    }
                }
                return(true);
            }

            Debug.Log.Error("Unsupported image display format \"{0}\"", format);
            return(false);
        }
コード例 #3
0
ファイル: XDicom.cs プロジェクト: xiaotie/mdcm
        private static void Save(XElement parent, DcmDataset dataset)
        {
            foreach (XElement attr in parent.Elements("attr"))
            {
                DicomTag tag = DicomTag.Parse(attr.Attribute("tag").Value);
                DicomVR  vr  = DicomVR.Lookup(attr.Attribute("vr").Value);
                int      len = int.Parse(attr.Attribute("len").Value, CultureInfo.InvariantCulture);

                if (vr == DicomVR.SQ)
                {
                    DcmItemSequence seq = new DcmItemSequence(tag);
                    foreach (XElement itm in attr.Elements("item"))
                    {
                        DcmItemSequenceItem item = new DcmItemSequenceItem();
                        Save(itm, item.Dataset);
                        seq.AddSequenceItem(item);
                    }
                    dataset.AddItem(seq);
                }
                else if (len == -1)
                {
                    DcmFragmentSequence seq = new DcmFragmentSequence(tag, vr);
                    bool first = true;
                    foreach (XElement itm in attr.Elements("item"))
                    {
                        if (first)
                        {
                            SaveFragmentOffsetTable(itm, seq);
                            first = false;
                        }
                        else
                        {
                            SaveFragmentItem(itm, seq);
                        }
                    }
                    dataset.AddItem(seq);
                }
                else
                {
                    DcmElement element = DcmElement.Create(tag, vr);
                    element.SetValueString(attr.FirstText());
                    dataset.AddItem(element);
                }
            }
        }
コード例 #4
0
        protected override void AdditionalMembers(DcmDataset dataset)
        {
            dataset.AddElement(DicomTags.PatientsBirthDate);
            dataset.AddElement(DicomTags.PatientsSex);
            dataset.AddElement(DicomTags.PatientsAge);
            dataset.AddElement(DicomTags.PatientsSize);
            dataset.AddElement(DicomTags.PatientsWeight);
            dataset.AddElement(DicomTags.MedicalAlerts);
            dataset.AddElement(DicomTags.PregnancyStatus);
            dataset.AddElement(DicomTags.Allergies);              //*Contrast allergies??
            dataset.AddElement(DicomTags.PatientComments);
            dataset.AddElement(DicomTags.SpecialNeeds);           //*
            dataset.AddElement(DicomTags.PatientState);           //*
            dataset.AddElement(DicomTags.CurrentPatientLocation); //*
            dataset.AddElement(DicomTags.InstitutionName);
            dataset.AddElement(DicomTags.AdmissionID);
            dataset.AddElement(DicomTags.AccessionNumber);
            dataset.AddElement(DicomTags.ReferringPhysiciansName);
            dataset.AddElement(DicomTags.AdmittingDiagnosesDescription);
            dataset.AddElement(DicomTags.RequestingPhysician);
            dataset.AddElement(DicomTags.StudyInstanceUID);
            dataset.AddElement(DicomTags.RequestedProcedureDescription);
            dataset.AddElement(DicomTags.RequestedProcedureID);
            dataset.AddElement(DicomTags.ReasonForTheRequestedProcedure);
            dataset.AddElement(DicomTags.RequestedProcedurePriority);

            dataset.AddElement(DicomTags.StudyDate);            //*
            dataset.AddElement(DicomTags.StudyTime);            //*

            //DicomTags.RequestedProcedureCodeSequence
            //DicomTags.ScheduledProtocolCodeSequence

            DcmItemSequenceItem sps = new DcmItemSequenceItem();

            sps.Dataset.AddElementWithValue(DicomTags.ScheduledStationAETitle, ScheduledStationAE);
            sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepStartDate);
            sps.Dataset.GetDA(DicomTags.ScheduledProcedureStepStartDate).SetDateTimeRange(ScheduledProcedureStepStartDate);
            sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepStartTime);
            sps.Dataset.GetTM(DicomTags.ScheduledProcedureStepStartTime).SetDateTimeRange(ScheduledProcedureStepStartTime);
            sps.Dataset.AddElementWithValue(DicomTags.Modality, Modality);
            sps.Dataset.AddElement(DicomTags.ScheduledPerformingPhysiciansName);
            sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepDescription);
            sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepLocation);
            sps.Dataset.AddElement(DicomTags.ScheduledProcedureStepID);

            DcmItemSequence sq = new DcmItemSequence(DicomTags.ScheduledProcedureStepSequence);

            sq.AddSequenceItem(sps);
            dataset.AddItem(sq);
        }
コード例 #5
0
        public void UpdateDataset(DcmDataset dataset)
        {
            if (_lossy)
            {
                DcmCodeString cs = dataset.GetCS(DicomTags.ImageType);
                if (cs != null)
                {
                    string[] values = cs.GetValues();
                    values[0] = "DERIVED";
                    cs.SetValues(values);
                }

                dataset.AddElementWithValue(DicomTags.SOPInstanceUID, DicomUID.Generate());

                // FIXME: append existing values
                dataset.AddElementWithValue(DicomTags.LossyImageCompression, "01");
                dataset.AddElementWithValue(DicomTags.LossyImageCompressionMethod, _lossyMethod);
                dataset.AddElementWithValue(DicomTags.LossyImageCompressionRatio, _lossyRatio);
            }
            dataset.AddElementWithValue(DicomTags.NumberOfFrames, _frames);
            dataset.AddElementWithValue(DicomTags.Columns, _width);
            dataset.AddElementWithValue(DicomTags.Rows, _height);
            dataset.AddElementWithValue(DicomTags.HighBit, _highBit);
            dataset.AddElementWithValue(DicomTags.BitsStored, _bitsStored);
            dataset.AddElementWithValue(DicomTags.BitsAllocated, _bitsAllocated);
            dataset.AddElementWithValue(DicomTags.SamplesPerPixel, _samplesPerPixel);
            dataset.AddElementWithValue(DicomTags.PixelRepresentation, _pixelRepresentation);
            dataset.AddElementWithValue(DicomTags.PhotometricInterpretation, _photometricInterpretation);
            if (SamplesPerPixel == 1)
            {
                dataset.AddElementWithValue(DicomTags.RescaleSlope, _rescaleSlope);
                dataset.AddElementWithValue(DicomTags.RescaleIntercept, _rescaleIntercept);
                //if (_pixelPaddingValue != 0)
                //    dataset.AddElementWithValue(DicomTags.PixelPaddingValue, _pixelPaddingValue);
            }
            else
            {
                dataset.AddElementWithValue(DicomTags.PlanarConfiguration, _planarConfiguration);
            }
            dataset.AddItem(_pixelDataItem);
        }
コード例 #6
0
        protected override void OnReceiveNGetRequest(byte presentationID, ushort messageID,
                                                     DicomUID requestedClass, DicomUID requestedInstance, DicomTag[] attributes)
        {
            if (requestedClass == DicomUID.PrinterSOPClass && requestedInstance == DicomUID.PrinterSOPInstance)
            {
                DcmDataset ds = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian);
                ds.AddElementWithValue(DicomTags.PrinterStatus, "NORMAL");
                ds.AddElementWithValue(DicomTags.PrinterStatus, "NORMAL");
                ds.AddElementWithValue(DicomTags.PrinterName, _config.PrinterName);
                ds.AddElementWithValue(DicomTags.Manufacturer, "N/A");
                ds.AddElementWithValue(DicomTags.ManufacturersModelName, "N/A");
                ds.AddElementWithValue(DicomTags.DeviceSerialNumber, "N/A");
                ds.AddElementWithValue(DicomTags.SoftwareVersions, "N/A");
                ds.SetDateTime(DicomTags.DateOfLastCalibration, DicomTags.TimeOfLastCalibration, DateTime.Now);

                SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, ds, DcmStatus.Success);
                return;
            }

            if (requestedClass == DicomUID.PrintJobSOPClass)
            {
                DcmPrintJob job = null;

                foreach (DcmPrintJob pj in _jobs)
                {
                    if (pj.SOPInstanceUID == requestedInstance)
                    {
                        job = pj;
                        break;
                    }
                }

                if (job == null)
                {
                    job = new DcmPrintJob(requestedInstance);
                    job.ExecutionStatus  = "DONE";
                    job.CreationDateTime = DateTime.Today;
                    job.PrintPriority    = _session.PrintPriority;
                    job.PrinterName      = _config.PrinterName;
                    job.Originator       = Associate.CallingAE;
                }

                SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, job.Dataset, DcmStatus.Success);
                return;
            }

            if (requestedClass == DicomUID.PrinterConfigurationRetrievalSOPClass && requestedInstance == DicomUID.PrinterConfigurationRetrievalSOPInstance)
            {
                DcmDataset ds     = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian);
                DcmDataset config = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian);


                DcmItemSequence sq = new DcmItemSequence(DicomTags.PrinterConfigurationSequence);
                sq.AddSequenceItem(config);
                ds.AddItem(sq);

                SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, ds, DcmStatus.Success);
                return;
            }

            SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified);
        }
コード例 #7
0
        public bool Initialize()
        {
            _dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedImageBoxSequence));

            // Set Defaults
            FilmOrientation   = FilmOrientation;
            FilmSizeID        = FilmSizeID;
            MagnificationType = MagnificationType;
            MaxDensity        = MaxDensity;
            //ConfigurationInformation = ConfigurationInformation;
            //SmoothingType = SmoothingType;
            BorderDensity     = BorderDensity;
            EmptyImageDensity = EmptyImageDensity;
            MinDensity        = MinDensity;
            Trim = Trim;
            RequestedResolutionID = RequestedResolutionID;

            //_dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedBasicAnnotationBoxSequence));
            //AnnotationDisplayFormatID = AnnotationDisplayFormatID;

            //_dataset.AddItem(new DcmItemSequence(DicomTags.ReferencedPresentationLUTSequence));
            //Illumination = Illumination;
            //ReflectedAmbientLight = ReflectedAmbientLight;

            string format = ImageDisplayFormat;

            if (String.IsNullOrEmpty(format))
            {
                Dicom.Debug.Log.Error("No display format present in N-CREATE Basic Image Box dataset");
                return(false);
            }

            string[] parts = format.Split('\\');

            if (parts[0] == "STANDARD" && parts.Length == 2)
            {
                parts = parts[1].Split(',');
                if (parts.Length == 2)
                {
                    try {
                        int row = int.Parse(parts[0]);
                        int col = int.Parse(parts[1]);
                        for (int r = 0; r < row; r++)
                        {
                            for (int c = 0; c < col; c++)
                            {
                                CreateImageBox();
                            }
                        }
                        return(true);
                    }
                    catch {
                    }
                }
            }

            if ((parts[0] == "ROW" || parts[0] == "COL") && parts.Length == 2)
            {
                try {
                    parts = parts[1].Split(',');
                    foreach (string part in parts)
                    {
                        int count = int.Parse(part);
                        for (int i = 0; i < count; i++)
                        {
                            CreateImageBox();
                        }
                    }
                    return(true);
                }
                catch {
                }
            }

            Dicom.Debug.Log.Error("Unsupported image display format \"{0}\"", format);
            return(false);
        }