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); }
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; } }
public void AddDelimiterDataSet(UInt32 tag) { var tagTmp = new DataElement(tag,(UInt32 ) 0xFFFFFFFFU); DataElements.Add(tagTmp); }
public void AddZeroLenDataSet(UInt32 tag) { var tagTmp = new DataElement(tag,(UInt32)0); DataElements.Add(tagTmp); }
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); }
//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); }
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); } }
// (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; }
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; }