Esempio n. 1
0
 private void DoWrite(DcmHandlerI handler, DcmEncodeParam param)
 {
     int grIndex = 0;
     IEnumerator enu = GetEnumerator();
     while( enu.MoveNext() )
     {
         DcmElement el = (DcmElement) enu.Current;
         if (!param.skipGroupLen && grTags[grIndex] == (el.tag() & (int) (- (0x100000000 - 0xffff0000))))
         {
             byte[] b4 = new byte[4];
             ByteBuffer.Wrap(b4, param.byteOrder).Write(grLens[grIndex]);
             handler.StartElement( grTags[grIndex], VRs.UL, el.StreamPosition);
             handler.Value(b4, 0, 4);
             handler.EndElement();
             ++grIndex;
         }
         if (el is SQElement)
         {
             int len = param.undefSeqLen?- 1:el.length();
             handler.StartElement(el.tag(), VRs.SQ, el.StreamPosition);
             handler.StartSequence(len);
              for (int j = 0, m = el.vm(); j < m; )
             {
                 BaseDataset ds = (BaseDataset) el.GetItem(j);
                 int itemlen = param.undefItemLen?- 1:ds.length();
                 handler.StartItem(++j, ds.GetItemOffset(), itemlen);
                 ds.DoWrite(handler, param);
                 handler.EndItem(itemlen);
             }
             handler.EndSequence(len);
             handler.EndElement();
         }
         else if (el is FragmentElement)
         {
             long offset = el.StreamPosition;
             handler.StartElement(el.tag(), el.vr(), offset);
             handler.StartSequence(- 1);
             if (offset != - 1L)
             {
                 offset += 12;
             }
              for (int j = 0, m = el.vm(); j < m; )
             {
                 ByteBuffer bb = el.GetDataFragment(j, param.byteOrder);
                 handler.Fragment(++j, offset, bb.ToArray(), (int)bb.Position, bb.length());
                 if (offset != - 1L)
                 {
                     offset += (bb.length() + 9) & (~ 1);
                 }
             }
             handler.EndSequence(- 1);
             handler.EndElement();
         }
         else
         {
     //					int len = el.length();
             handler.StartElement(el.tag(), el.vr(), el.StreamPosition);
             ByteBuffer bb = el.GetByteBuffer(param.byteOrder);
             handler.Value(bb);
             handler.EndElement();
         }
     }
 }
Esempio n. 2
0
 public virtual void WriteDataset(DcmHandlerI handler, DcmEncodeParam param)
 {
     if (!(param.skipGroupLen && param.undefItemLen && param.undefSeqLen))
         CalcLength(param);
     handler.StartDataset();
     handler.DcmDecodeParam = param;
     DoWrite(handler, param);
     handler.EndDataset();
 }
Esempio n. 3
0
 public void Write(DcmHandlerI handler)
 {
     handler.StartFileMetaInfo(preamble);
     handler.DcmDecodeParam = DcmDecodeParam.EVR_LE;
     Write(0x00020000, grLen(), handler);
     handler.EndFileMetaInfo();
 }
Esempio n. 4
0
 protected virtual void Write(uint grTag, int grLen, DcmHandlerI handler)
 {
     byte[] b4 = new byte[]{(byte) grLen, (byte)(grLen>>8), (byte)(grLen>>16), (byte)((grLen>>24))};
     long el1Pos = ((DcmElement) m_list[0]).StreamPosition;
     handler.StartElement(grTag, VRs.UL, el1Pos == - 1L?- 1L:el1Pos - 12);
     handler.Value(b4, 0, 4);
     handler.EndElement();
     for (int i = 0, n = m_list.Count; i < n; ++i)
     {
         DcmElement el = (DcmElement) m_list[i];
         int len = el.length();
         handler.StartElement(el.tag(), el.vr(), el.StreamPosition);
         ByteBuffer bb = el.GetByteBuffer(ByteOrder.LITTLE_ENDIAN);
         handler.Value(bb.ToArray(), (int)bb.Position, bb.length());
         handler.EndElement();
     }
 }
Esempio n. 5
0
 public void Write(DcmHandlerI handler)
 {
     handler.DcmDecodeParam = DcmDecodeParam.IVR_LE;
     Write(0x00000000, grLen(), handler);
 }