/** * Return true if this tag should be skipped/replaced with an alternate tag. * @param in * @return */ public boolean isSkip(DicomInputStream in) { if( TagUtils.isPrivateDataElement(in.tag() )) { return in.valueLength() >= privateSkipSize; } return in.valueLength() >= publicSkipSize; }
this.jpeg = !rle && JPEG_TS.contains(tsuid); dis.readHeader(); int offsetTableLen = dis.valueLength(); if (offsetTableLen != 0) { if (offsetTableLen != numberOfFrames * 4) {
private void transcodeItem(DicomInputStream in) throws IOException { final DicomElement sq = in.sq(); final VR sqvr = sq.vr(); final int vallen = in.valueLength(); if (vallen == -1 || sqvr == VR.SQ) { out.writeHeader(Tag.Item, null, -1); in.readValue(in); out.writeHeader(Tag.ItemDelimitationItem, null, 0); } else { out.writeHeader(Tag.Item, null, in.valueLength()); transcodeValue(in, sqvr); } }
if (log.isDebugEnabled()) log.debug("Read " + TagUtils.toString(dis.tag()) + " #" + dis.valueLength()); if (dis.tag() == Tag.Item) { Item item = new Item( items.isEmpty() ? 0 : last().nextOffset(), iis.getStreamPosition(), dis.valueLength()); if (items.isEmpty() || rle) { addFirstItemOfFrame(item); || dis.valueLength() != 0) { log.warn("expected (FFFE,E0DD) #0 but read " + TagUtils.toString(dis.tag()) + " #" + dis.valueLength());
public boolean readValue(DicomInputStream in) throws IOException { boolean skip = isSkip(in); if(!skip){ if (subHandler != null){ return subHandler.readValue(in); }else{ return in.readValue(in); } } in.getDicomObject().add(new SkippedDicomElement(in.tag(), in.vr(), false, in.valueLength(), in.getStreamPosition())); in.skip(in.valueLength()); return true; }
private void transcodeValue(DicomInputStream in, VR vr) throws IOException { boolean toggleEndian = out.getTransferSyntax().bigEndian() != in.getTransferSyntax().bigEndian(); int remaining = in.valueLength(); while (remaining > 0) { int len = Math.min(remaining, buf.length); in.readFully(buf, 0, len); if (toggleEndian) vr.toggleEndian(buf, 0, len); out.write(buf, 0, len); remaining -= len; } }
private long endPos() throws IOException { if (recordSeqLen == -1) { long endPos = raf.length() - 12; raf.seek(endPos); if (in.readHeader() == Tag.SequenceDelimitationItem) { recordSeqLen = (int) (endPos - firstRecordPos); } else { endPos = filesetInfo.getOffsetLastRootRecord(); raf.seek(endPos); in.setStreamPosition(endPos); DicomObject dcmobj = new BasicDicomObject(); while (in.readHeader() == Tag.Item) { in.readDicomObject(dcmobj, in.valueLength()); dcmobj.clear(); endPos = in.getStreamPosition(); } if (in.tag() != Tag.SequenceDelimitationItem) { throw new IOException("Unexpected Tag " + TagUtils.toString(in.tag()) + " at offset " + endPos); } recordSeqLen = (int) (endPos - firstRecordPos); } } return firstRecordPos + recordSeqLen; }
public DicomDirWriter(File file) throws IOException { super(new RandomAccessFile(checkExists(file), "rw")); this.file = file; offsetFirstRootRecord(filesetInfo.getOffsetFirstRootRecord()); offsetLastRootRecord(filesetInfo.getOffsetLastRootRecord()); this.firstRecordPos = in.getStreamPosition(); this.recordSeqLen = in.valueLength(); out = new DicomOutputStream(raf); out.setExplicitSequenceLength(recordSeqLen != -1); out.setExplicitItemLength(recordSeqLen != -1); if (filesetInfo.isEmpty()) { this.recordSeqLen = 0; } }
private void transcodeItem(DicomInputStream in) throws SAXException, IOException { final DicomElement sq = in.sq(); final int itemLen = in.valueLength(); final VR sqvr = sq.vr(); final int index = sq.countItems(); if (file != null) file = new File(file, Integer.toString(index+1)); final String fpath = fpath(sq.tag(), sqvr, itemLen); startItemElement(in.tagPosition(), itemLen, fpath); in.readValue(in); if (sq.hasFragments() && index < sq.countItems()) { byte[] data = sq.getFragment(index); if (fpath != null) { writeToFile(data); } else { final boolean bigEndian = in.getTransferSyntax().bigEndian(); sqvr.formatXMLValue(data, bigEndian, null, cbuf, ch); } sq.setFragment(index, EMPTY_BYTES); // allow gc to release byte[] } endItemElement(); if (file != null) file = file.getParentFile(); }
final int tag = in.tag(); final VR vr = in.vr(); final int vallen = in.valueLength(); final DicomObject attrs = in.getDicomObject(); final String tagHex = StringUtils.intToHex(tag);
pixelDataLen = dis.valueLength(); compressed = pixelDataLen == -1; verifyTransferSyntax();
private void transcodeAttribute(DicomInputStream in) throws IOException { final int tag = in.tag(); final VR vr = in.vr(); final int vallen = in.valueLength(); final DicomObject attrs = in.getDicomObject(); if (vallen == -1 || vr == VR.SQ) { out.writeHeader(tag, vr, -1); TransferSyntax prevTS = out.getTransferSyntax(); if (vr == VR.UN) { out.setTransferSyntax(TransferSyntax.ImplicitVRLittleEndian); } in.readValue(in); attrs.remove(tag); out.writeHeader(Tag.SequenceDelimitationItem, null, 0); out.setTransferSyntax(prevTS); } else if (!TagUtils.isGroupLengthElement(tag)) { out.writeHeader(tag, vr, vallen); if (tag == Tag.SpecificCharacterSet || TagUtils.isPrivateCreatorDataElement(tag)) { byte[] val = in.readBytes(vallen); boolean bigEndian = in.getTransferSyntax().bigEndian(); attrs.putBytes(tag, vr, val, bigEndian); out.write(val); } else { transcodeValue(in, vr); } } }