コード例 #1
0
        public static ModalityDataLut Create(IDicomElementProvider dicomElementProvider)
        {
            DicomElementSq modalityLutSequence = (DicomElementSq)dicomElementProvider[DicomTags.ModalityLutSequence];
            int            pixelRepresentation = GetPixelRepresentation(dicomElementProvider);

            return(Create(modalityLutSequence, pixelRepresentation));
        }
コード例 #2
0
ファイル: VoiDataLut.cs プロジェクト: 1059444127/XA
        public static List <VoiDataLut> Create(IDicomElementProvider elementProvider)
        {
            if (elementProvider == null)
            {
                throw new ArgumentNullException("elementProvider");
            }

            DicomElementSq voiLutSequence = elementProvider[DicomTags.VoiLutSequence] as DicomElementSq;

            if (voiLutSequence == null)
            {
                return(new List <VoiDataLut>());
            }

            DicomElementSq modalityLutSequence = elementProvider[DicomTags.ModalityLutSequence] as DicomElementSq;
            int            pixelRepresentation = GetPixelRepresentation(elementProvider);

            if (IsValidAttribute(modalityLutSequence))
            {
                return(Create(voiLutSequence, modalityLutSequence, pixelRepresentation));
            }

            DicomElement rescaleInterceptElement = elementProvider[DicomTags.RescaleIntercept];

            if (IsValidAttribute(rescaleInterceptElement))
            {
                double rescaleSlope     = GetRescaleSlope(elementProvider);
                double rescaleIntercept = rescaleInterceptElement.GetFloat64(0, 0);
                int    bitsStored       = GetBitsStored(elementProvider);

                return(Create(voiLutSequence, bitsStored, pixelRepresentation, rescaleSlope, rescaleIntercept));
            }

            return(Create(voiLutSequence, pixelRepresentation));
        }
コード例 #3
0
ファイル: VoiDataLut.cs プロジェクト: 1059444127/XA
        private static List <VoiDataLut> Create(DicomElementSq voiLutSequence, int pixelRepresentation)
        {
            bool isFirstMappedPixelSigned = pixelRepresentation != 0;

            List <DataLut> dataLuts = DataLut.Create(voiLutSequence, isFirstMappedPixelSigned, false);

            return(Convert(dataLuts));
        }
コード例 #4
0
        /// <summary>
        /// Initializes a new instance of the SequenceIodList class.
        /// </summary>
        public SequenceIodList(DicomElementSq dicomElementSq)
        {
            if (dicomElementSq == null)
            {
                throw new ArgumentNullException("dicomElementSq");
            }

            _dicomElementSq = dicomElementSq;
        }
コード例 #5
0
        internal static ModalityDataLut Create(DicomElementSq modalityLutSequence, int pixelRepresentation)
        {
            List <DataLut> data = DataLut.Create(modalityLutSequence, pixelRepresentation != 0, false);

            if (data.Count == 0)
            {
                return(null);
            }

            string modalityLutType = ((DicomSequenceItem[])modalityLutSequence.Values)[0][DicomTags.ModalityLutType].ToString();

            return(new ModalityDataLut(data[0], modalityLutType));
        }
コード例 #6
0
ファイル: DataLut.cs プロジェクト: 1059444127/XA
		public static List<DataLut> Create(DicomElementSq sequence, bool isFirstMappedPixelSigned, bool isLutDataSigned)
		{
			if (sequence == null)
				throw new ArgumentNullException("sequence");
			
			if (sequence.IsEmpty || sequence.IsNull)
				return new List<DataLut>();

			DicomSequenceItem[] sequenceItems = sequence.Values as DicomSequenceItem[];
			if (sequenceItems == null || sequenceItems.Length == 0)
				return new List<DataLut>();

			return Create(sequenceItems, isFirstMappedPixelSigned, isLutDataSigned);
		}
コード例 #7
0
ファイル: VoiDataLut.cs プロジェクト: 1059444127/XA
        private static List <VoiDataLut> Create(DicomElementSq voiLutSequence, DicomElementSq modalityLutSequence, int pixelRepresentation)
        {
            ModalityDataLut modalityLut = ModalityDataLut.Create(modalityLutSequence, pixelRepresentation);

            if (modalityLut == null)
            {
                throw new DicomDataException("Input Modality Lut Sequence is not valid.");
            }

            //Hounsfield units are always signed.
            bool isFirstMappedPixelValueSigned = pixelRepresentation != 0 || modalityLut.ModalityLutType == "HU";

            List <DataLut> dataLuts = Create(voiLutSequence, isFirstMappedPixelValueSigned, false);

            return(Convert(dataLuts));
        }
コード例 #8
0
ファイル: VoiDataLut.cs プロジェクト: 1059444127/XA
        private static List <VoiDataLut> Create(DicomElementSq voiLutSequence, int bitsStored, int pixelRepresentation, double rescaleSlope, double rescaleIntercept)
        {
            int  minPixelValue;
            int  maxPixelValue;
            bool isSigned = pixelRepresentation != 0;

            GetMinMaxPixelValue(bitsStored, isSigned, out minPixelValue, out maxPixelValue);

            double minModalityLutValue = minPixelValue * rescaleSlope + rescaleIntercept;
            double maxModalityLutValue = maxPixelValue * rescaleSlope + rescaleIntercept;

            bool isFirstMappedPixelValueSigned = minModalityLutValue < 0 || maxModalityLutValue < 0;

            List <DataLut> dataLuts = DataLut.Create(voiLutSequence, isFirstMappedPixelValueSigned, false);

            return(Convert(dataLuts));
        }
コード例 #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SequenceIodList&lt;T&gt;"/> class.
 /// </summary>
 /// <param name="tag">The tag.</param>
 public SequenceIodList(uint tag)
 {
     _dicomElementSq = new DicomElementSq(tag);
 }
コード例 #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SequenceIodList&lt;T&gt;"/> class.
 /// </summary>
 /// <param name="dicomTag">The dicom tag.</param>
 public SequenceIodList(DicomTag dicomTag)
 {
     _dicomElementSq = new DicomElementSq(dicomTag);
 }
コード例 #11
0
ファイル: StreamWriter.cs プロジェクト: yjsyyyjszf/DicomBase
        public DicomWriteStatus Write(TransferSyntax syntax, DicomDataset dataset, DicomWriteOptions options)
        {
            TransferSyntax = syntax;

            foreach (DicomElement item in dataset)
            {
                if (item.Tag.Element == 0x0000)
                {
                    continue;
                }

                if (item.IsEmpty)
                {
                    continue;
                }

                if (Flags.IsSet(options, DicomWriteOptions.CalculateGroupLengths) &&
                    item.Tag.Group != _group && item.Tag.Group <= 0x7fe0)
                {
                    _group = item.Tag.Group;
                    _writer.Write((ushort)_group);
                    _writer.Write((ushort)0x0000);
                    if (_syntax.ExplicitVr)
                    {
                        _writer.Write((byte)'U');
                        _writer.Write((byte)'L');
                        _writer.Write((ushort)4);
                    }
                    else
                    {
                        _writer.Write((uint)4);
                    }
                    _writer.Write((uint)dataset.CalculateGroupWriteLength(_group, _syntax, options));
                }

                _writer.Write((ushort)item.Tag.Group);
                _writer.Write((ushort)item.Tag.Element);

                if (_syntax.ExplicitVr)
                {
                    _writer.Write((byte)item.Tag.VR.Name[0]);
                    _writer.Write((byte)item.Tag.VR.Name[1]);
                }

                if (item is DicomElementSq)
                {
                    DicomElementSq sq = item as DicomElementSq;

                    if (_syntax.ExplicitVr)
                    {
                        _writer.Write((ushort)0x0000);
                    }

                    if (Flags.IsSet(options, DicomWriteOptions.ExplicitLengthSequence))
                    {
                        int hl = _syntax.ExplicitVr ? 12 : 8;
                        _writer.Write((uint)sq.CalculateWriteLength(_syntax, options & ~DicomWriteOptions.CalculateGroupLengths) - (uint)hl);
                    }
                    else
                    {
                        _writer.Write((uint)UndefinedLength);
                    }

                    foreach (DicomSequenceItem ids in item.Values as DicomSequenceItem[])
                    {
                        _writer.Write((ushort)DicomTag.Item.Group);
                        _writer.Write((ushort)DicomTag.Item.Element);

                        if (Flags.IsSet(options, DicomWriteOptions.ExplicitLengthSequenceItem))
                        {
                            _writer.Write((uint)ids.CalculateWriteLength(_syntax, options & ~DicomWriteOptions.CalculateGroupLengths));
                        }
                        else
                        {
                            _writer.Write((uint)UndefinedLength);
                        }

                        Write(this.TransferSyntax, ids, options & ~DicomWriteOptions.CalculateGroupLengths);

                        if (!Flags.IsSet(options, DicomWriteOptions.ExplicitLengthSequenceItem))
                        {
                            _writer.Write((ushort)DicomTag.ItemDelimitationItem.Group);
                            _writer.Write((ushort)DicomTag.ItemDelimitationItem.Element);
                            _writer.Write((uint)0x00000000);
                        }
                    }

                    if (!Flags.IsSet(options, DicomWriteOptions.ExplicitLengthSequence))
                    {
                        _writer.Write((ushort)DicomTag.SequenceDelimitationItem.Group);
                        _writer.Write((ushort)DicomTag.SequenceDelimitationItem.Element);
                        _writer.Write((uint)0x00000000);
                    }
                }

                else if (item is DicomFragmentSequence)
                {
                    DicomFragmentSequence fs = item as DicomFragmentSequence;

                    if (_syntax.ExplicitVr)
                    {
                        _writer.Write((ushort)0x0000);
                    }
                    _writer.Write((uint)UndefinedLength);

                    _writer.Write((ushort)DicomTag.Item.Group);
                    _writer.Write((ushort)DicomTag.Item.Element);

                    if (Flags.IsSet(options, DicomWriteOptions.WriteFragmentOffsetTable) && fs.HasOffsetTable)
                    {
                        _writer.Write((uint)fs.OffsetTableBuffer.Length);
                        fs.OffsetTableBuffer.CopyTo(_writer);
                    }
                    else
                    {
                        _writer.Write((uint)0x00000000);
                    }

                    foreach (DicomFragment bb in fs.Fragments)
                    {
                        _writer.Write((ushort)DicomTag.Item.Group);
                        _writer.Write((ushort)DicomTag.Item.Element);
                        _writer.Write((uint)bb.Length);
                        bb.GetByteBuffer(_syntax).CopyTo(_writer);
                    }

                    _writer.Write((ushort)DicomTag.SequenceDelimitationItem.Group);
                    _writer.Write((ushort)DicomTag.SequenceDelimitationItem.Element);
                    _writer.Write((uint)0x00000000);
                }
                else
                {
                    DicomElement de      = item;
                    ByteBuffer   theData = de.GetByteBuffer(_syntax, dataset.SpecificCharacterSet);
                    if (_syntax.ExplicitVr)
                    {
                        if (de.Tag.VR.Is16BitLengthField)
                        {
                            _writer.Write((ushort)theData.Length);
                        }
                        else
                        {
                            _writer.Write((ushort)0x0000);
                            _writer.Write((uint)theData.Length);
                        }
                    }
                    else
                    {
                        _writer.Write((uint)theData.Length);
                    }

                    if (theData.Length > 0)
                    {
                        theData.CopyTo(_writer);
                    }
                }
            }

            return(DicomWriteStatus.Success);
        }
コード例 #12
0
ファイル: WorklistScp.cs プロジェクト: yjsyyyjszf/DicomBase
        private void OnReceiveMWLQuery(DicomServer server, byte presentationId, DicomMessage message)
        {
            var tagList = new List <DicomTag>();

            string specificCharacterSet = string.Empty;

            foreach (var attrib in message.DataSet)
            {
                tagList.Add(attrib.Tag);

                if (!attrib.IsNull)
                {
                    switch (attrib.Tag.TagValue)
                    {
                    case DicomTags.SpecificCharacterSet:
                        specificCharacterSet = message.DataSet[DicomTags.SpecificCharacterSet];
                        break;

                        #region Case Scheduled Procedure Step Seq

                    case DicomTags.ScheduledProcedureStepSequence:
                        DicomElementSq    sequence   = attrib as DicomElementSq;
                        DicomSequenceItem sqSubItems = sequence[0];

                        foreach (var sqSubItem in sqSubItems)
                        {
                            if (sqSubItem.IsNull)
                            {
                                continue;
                            }

                            tagList.Add(sqSubItem.Tag);

                            switch (sqSubItem.Tag.TagValue)
                            {
                            case DicomTags.ScheduledStationName:
                                break;

                            case DicomTags.Modality:
                                break;

                            case DicomTags.ScheduledPerformingPhysiciansName:
                                break;

                            case DicomTags.ScheduledProcedureStepStartDate:
                                break;

                            case DicomTags.ScheduledProcedureStepStartTime:
                                break;

                            // Optional Matching keys
                            case DicomTags.ScheduledProcedureStepLocation:
                                break;

                            case DicomTags.ScheduledProcedureStepDescription:
                                break;

                            case DicomTags.RequestedProcedureId:
                                break;

                            case DicomTags.ScheduledProcedureStepId:
                                break;

                            default:
                                break;
                            }
                        }
                        break;

                        #endregion

                    case DicomTags.PatientId:
                        break;

                    case DicomTags.PatientsName:
                        break;

                    //Optional Matching Keys
                    case DicomTags.AccessionNumber:
                        break;

                    case DicomTags.ReferringPhysiciansName:
                        break;

                    default:
                        break;
                    }
                }
            }

            // Populate result Information from Db
            List <DicomMessage> results = new List <DicomMessage>();
            try
            {
                foreach (var dicomMessage in results)
                {
                    if (_cancelReceived)
                    {
                        throw new DicomException("DICOM C-Cancel Received");
                    }

                    server.SendCFindResponse(presentationId, message.MessageId, dicomMessage,
                                             DicomStatuses.Pending);
                }
            }
            catch (Exception)
            {
                if (_cancelReceived)
                {
                    var errorResponse = new DicomMessage();
                    server.SendCFindResponse(presentationId, message.MessageId, errorResponse,
                                             DicomStatuses.Cancel);
                }

                return;
            }

            var finalResponse = new DicomMessage();
            server.SendCFindResponse(presentationId, message.MessageId, finalResponse, DicomStatuses.Success);
        }