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(); } } }
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(); }
public void Write(DcmHandlerI handler) { handler.StartFileMetaInfo(preamble); handler.DcmDecodeParam = DcmDecodeParam.EVR_LE; Write(0x00020000, grLen(), handler); handler.EndFileMetaInfo(); }
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(); } }
public void Write(DcmHandlerI handler) { handler.DcmDecodeParam = DcmDecodeParam.IVR_LE; Write(0x00000000, grLen(), handler); }