Example #1
0
 public void CreateGroupLengthDataset(UInt32 groupLengthTag)
 {
     UInt32 grLen = 0;
     foreach (DataElement dataElement  in DataElements)
     {
         if (dataElement.Length != 0xFFFFFFFFU)
         {
             grLen += dataElement.Length + 8;
         }
         else
         {
             grLen += 12;
         }
     }
     var de = new DataElement();
     de.DataTag = groupLengthTag;
     de.Length = 4;
     de.DataValue = BitConverter.GetBytes(grLen);
     DataElements.Insert(0, de);
 }
Example #2
0
        public  byte[] Parse(byte[] byteBuff, UInt16 off)
        {
            if (byteBuff == null) throw new ArgumentNullException("byteBuff");
            try
            {
                
                UInt32 pos;
                PresentationContextID = byteBuff[off];
                MessageControlHeader = byteBuff[off + 1];

                pos = (UInt32)off + 2;
                while ((pos < Length))
                {
                    if (pos > Length + off - 8)
                    {
                        break;
                    }


                    UInt32 key = (UInt32)((BitConverter.ToUInt16(byteBuff, (int)pos)) << 16) +
                                 BitConverter.ToUInt16(byteBuff, (int)pos + 2);
                    UInt32 Len;
                    try
                    {
                        Len = BitConverter.ToUInt32(byteBuff, (int)pos + 4);
                    }
                    catch (Exception)
                    {
                        Len = 0;
                    }
                    
                    
                    var de = new DataElement();
                    Debug.WriteLine(key.ToString("X8"));
                    if (key.Equals(0xFFFEE0DDU) || key.Equals(0xFFFEE00DU) || key.Equals(0xFFFEE000U) ||
                        (Len == 0xFFFFFFFFU))
                    {
                        pos += 8;
                        //if (Len == 0xFFFFFFFFU) DataElementHashTable.Add(key, null);
                        de = new DataElement(key, 0);
                        DataElements.Add(de);
                        continue;
                    }
                    if (Len > 0)
                    {
                        if (pos + Len + 8 > Length + off)
                        {
                            break;
                        }

                        var dataValue = new byte[Len];
                        Array.Copy(byteBuff, pos + 8, dataValue, 0, Len);
                        if (Len > 7)
                        {
                            if (BitConverter.ToUInt32(dataValue,0) == 0xe000fffeuL)
                            {
                                Len = 0;
                                if(!DataElementHashTable.ContainsKey(key)) DataElementHashTable.Add(key, null );
                                de = new DataElement(key, Len );
                                DataElements.Add(de);
                            }
                            else
                            {
                                if (!DataElementHashTable.ContainsKey(key)) DataElementHashTable.Add(key, dataValue);
                                de = new DataElement(key, dataValue);
                                DataElements.Add(de);
                            }
                        }
                        else
                        {
                            if (!DataElementHashTable.ContainsKey(key)) DataElementHashTable.Add(key, dataValue);
                            de = new DataElement(key, dataValue);
                            DataElements.Add(de);
                        }
                    }
                    else
                    {
                        Len = 0;
                        if (!DataElementHashTable.ContainsKey(key)) DataElementHashTable.Add(key, null);
                        de = new DataElement(key, 0);
                        DataElements.Add(de);
                    }
                    pos += Len + 8;
                }

                if (pos == Length + off)
                {
                    return null;
                }
                else
                {
                    var tmp = new byte[Length + off - pos];
                    Array.Copy(byteBuff, pos, tmp, 0, Length + off - pos);
                    return tmp;
                }
            }
            catch (Exception exception)
            {

                throw exception;
            }
        }
Example #3
0
 public void AddDelimiterDataSet(UInt32 tag)
 {
     var tagTmp = new DataElement(tag,(UInt32 ) 0xFFFFFFFFU);            
     DataElements.Add(tagTmp);
 }
Example #4
0
 public void AddZeroLenDataSet(UInt32 tag)
 {
     var tagTmp = new DataElement(tag,(UInt32)0);            
     DataElements.Add(tagTmp);
 }
Example #5
0
 public void AddDataSet(UInt16 iData, UInt32 dataTag)
 {
     var tagTmp = new DataElement();
     tagTmp.DataTag = dataTag;
     tagTmp.DataValue = BitConverter.GetBytes(Convert.ToUInt16(iData));
     tagTmp.Length = 2;
     DataElements.Add(tagTmp);
 }
Example #6
0
        //Public Overloads Sub AddDataSet(ByVal sData As String, ByVal TagGroup As UInt16, ByVal TagElement As UInt16)
        //    Dim TagTmp As New DataElement
        //    TagTmp.DataTag = (TagGroup << 16) + TagElement

        //    If Not String.IsNullOrEmpty(sData) Then
        //        If sData.Length Mod 2 = 1 Then
        //            sData = sData & " "
        //        End If
        //        TagTmp.DataValue = Encoding.ASCII.GetBytes(sData)
        //        TagTmp.Length = sData.Length
        //    Else
        //        TagTmp.Length = 0
        //    End If
        //    DataElements.Add(TagTmp)
        //End Sub

        public void AddDataSet(string sData, UInt32 dataTag)
        {
            var tagTmp = new DataElement();
            tagTmp.DataTag = dataTag;

            if (!string.IsNullOrEmpty(sData))
            {
                if (sData.Length%2 == 1)
                {
                    sData = sData + " ";
                }
                tagTmp.DataValue = Encoding.ASCII.GetBytes(sData);
                tagTmp.Length = (UInt32) sData.Length;
            }
            else
            {
                tagTmp.Length = 0;
            }
            DataElements.Add(tagTmp);
        }
Example #7
0
        Int16 SetImageBox()
        {
            UnparsePDU u;
            var buff = new byte[0];

            try
            {
                var nSet = new N_SET();
                ImageBoxInstanceUID = Ultility.CreateInstanceUID(ImageBoxInstance);
                DataElement dataElement = new DataElement(DICOMTag.ImageBoxPositionTag,BitConverter.GetBytes( 1));
                FileMetaFormat fs = new FileMetaFormat() ;
                string DCMPath=@"C:\x.dcm";
                nSet.NSETRequestCommand(_stream, _presentationContextID, SOP.BasicGrayScaleImageSOPClassUID, bMessageID,
                                        ImageBoxInstanceUID, fs.ReadDCMFile(DCMPath));
                u = new UnparsePDU(_stream, buff);
                if (u.PDUType.Equals(4))
                {
                    var parsedPDU = new PDataTFPDU(u);
                    string nsetRespondstring = nSet.NSETRespondParse(parsedPDU);
                    if (!nsetRespondstring.Contains("FAILURE"))
                    {
                        Int16 retstatus = Convert.ToInt16(parsedPDU.PDVContent.DataElementHashTable[DICOMTag.StatusTag]);
                        _logger.Info("NCREATE RESPOND SUCCESS!");
                        if (!Convert.ToInt16(parsedPDU.PDVContent.DataElementHashTable[DICOMTag.DataSetTypeTag]).Equals(
                            CommandFieldConst.NoDataSet))
                        {
                            u = new UnparsePDU(_stream, buff);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.FatalException("Exception", ex);
            }
        }
Example #8
0
//        (0x20100000,UL,0x000000AA) # 
//(0x20100010,ST,"STANDARD\1,1") # Image Display Format
//(0x20100050,CS,"8INX10IN") # Film Size ID
//(0x20100100,CS,"BLACK ") # Border Density
//(0x20100150,ST,"128 ") # Configuration Information
//(0x20100500,SQ,
//# Item Number 1
//# (0xFFFEE000, UNDEFINED) # ItemIntroducer 
//  >(0x00081150,UI,"1.2.840.10008.5.1.1.1") # Referenced SOP Class UID
//  >(0x00081155,UI,"1.2.826.0.1.3680043.2.1211.9.1") # Referenced SOP Instance UID
//# (0xFFFEE00D, 0) # ItemDelimiter 
//# (0xFFFEE0DD, 0) # SequenceDelimiter
//) # Referenced Film Session Sequence with length of: 0

        private Int16 CreateBasicFilmBox(UInt16 row,UInt16 col)
        {
            UnparsePDU u;
            var buff = new byte[0];
            try
            {
                var ncreate = new N_CREATE();
                var listAttributes = new List<DataElement>();
                DataElement dataElement;
                ImageDisplayFormat = String.Concat(@"STANDARD\",row.ToString( "D"),col.ToString( "D"));
                if ((ImageDisplayFormat.Length%2) != 0) ImageDisplayFormat += ' ';
                dataElement = new DataElement(DICOMTag.ImageDisplayFormatTag,
                                              Encoding.ASCII.GetBytes(ImageDisplayFormat));
                listAttributes.Add(dataElement);
                dataElement = new DataElement(DICOMTag.FilmOrientationTag, Encoding.ASCII.GetBytes(FilmOrientation));
                listAttributes.Add(dataElement);
                dataElement = new DataElement(DICOMTag. FilmSizeIDTag , Encoding.ASCII.GetBytes(FilmSizeID));
                listAttributes.Add(dataElement);
                
                //reference film session
                dataElement = new DataElement(DICOMTag.ReferencedFilmSessionSequenceTag, 0xFFFFFFFFU);
                listAttributes.Add(dataElement);                
                dataElement = new DataElement(DICOMTag.ItemIntroducerTag , 0xFFFFFFFFU);
                listAttributes.Add(dataElement);
                dataElement = new DataElement(DICOMTag.ReferencedSOPClassUIDTag, Encoding.ASCII.GetBytes(SOP.BasicFilmSessionSOPClassUID));
                listAttributes.Add(dataElement);
                dataElement = new DataElement(DICOMTag.ReferencedSOPInstanceUIDTag  , Encoding.ASCII.GetBytes(FilmSessionInstanceUID ));
                listAttributes.Add(dataElement);

                FilmBoxInstanceUID = Ultility.CreateInstanceUID(FilmBoxInstance);
                ncreate.NCREATERequestCommand(_stream, _presentationContextID, SOP.BasicFilmBoxSOPClassUID,
                                              bMessageID, FilmBoxInstanceUID, listAttributes);
                u = new UnparsePDU(_stream, buff);
                if (u.PDUType.Equals(4))
                {
                    var parsedPDU = new PDataTFPDU(u);
                    string ncreateRespondstring = ncreate.NCREATERespondParse(parsedPDU);
                    if (!ncreateRespondstring.Contains("FAILURE"))
                    {
                        Int16 retstatus = Convert.ToInt16(parsedPDU.PDVContent.DataElementHashTable[DICOMTag.StatusTag]);
                        _logger.Info("NCREATE RESPOND SUCCESS!");
                        if (!Convert.ToInt16(parsedPDU.PDVContent.DataElementHashTable[DICOMTag.DataSetTypeTag]).Equals(
                                CommandFieldConst.NoDataSet))
                        {
                            u = new UnparsePDU(_stream, buff);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.FatalException("Exception", ex);
            }
            return 0;
        }
Example #9
0
 private Int16 CreateFilmSession(UInt16 NoOfCopies)
 {
     UnparsePDU u;
     var buff = new byte[0];
     try
     {
         FilmSessionInstance = new object();
         var ncreate = new N_CREATE();
         var listAttributes = new List<DataElement>();
         var dataElement = new DataElement(DICOMTag.NumberOfCopiesTag,
                                           Encoding.ASCII.GetBytes(NoOfCopies.ToString("D2")));
         listAttributes.Add(dataElement);
         FilmSessionInstanceUID = Ultility.CreateInstanceUID(FilmSessionInstance);
         ncreate.NCREATERequestCommand(_stream, _presentationContextID, SOP.BasicFilmSessionSOPClassUID,
                                       bMessageID,FilmSessionInstanceUID , listAttributes);
         u = new UnparsePDU(_stream, buff);
         if (u.PDUType.Equals(4))
         {
             var parsedPDU = new PDataTFPDU(u);
             string ncreateRespondstring = ncreate.NCREATERespondParse(parsedPDU);
             if (!ncreateRespondstring.Contains("FAILURE"))
             {
                 Int16 retstatus = Convert.ToInt16(parsedPDU.PDVContent.DataElementHashTable[DICOMTag.StatusTag]);
                 _logger.Info("NCREATE RESPOND SUCCESS!");
                 if (
                     !Convert.ToInt16(parsedPDU.PDVContent.DataElementHashTable[DICOMTag.DataSetTypeTag]).Equals(
                         CommandFieldConst.NoDataSet))
                 {
                     u = new UnparsePDU(_stream, buff);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         _logger.FatalException("Exception", ex);
     }
     return 0;
 }