public EncapsulatedPixelDataImageInputStream(DicomInputStream dis, ImageDescriptor imageDescriptor) throws IOException { super(dis); this.dis = dis; this.imageDescriptor = imageDescriptor; dis.readItemHeader(); byte[] b = new byte[dis.length()]; dis.readFully(b); basicOffsetTable = b; readItemHeader(); frameStartWord = fragmStartWord; }
private boolean readItemHeader() throws IOException { if (!dis.readItemHeader()) { endOfStream = true; return false; } fragmEndPos = streamPos + dis.length(); mark(); fragmStartWord = (super.read() << 8) | super.read(); reset(); return true; }
private void readFragments(Attributes attrs, int fragsTag, VR vr) throws IOException { Fragments frags = new Fragments(vr, attrs.bigEndian(), 10); String privateCreator = attrs.getPrivateCreator(fragsTag); for (int i = 0; readItemHeader(); ++i) { addItemPointer(fragsTag, privateCreator, i); handler.readValue(this, frags); removeItemPointer(); } if (frags.isEmpty()) attrs.setNull(fragsTag, vr); else { frags.trimToSize(); attrs.setValue(fragsTag, vr, frags); } }
private void readSequence(int len, Attributes attrs, int sqtag) throws IOException { if (len == 0) { attrs.setNull(sqtag, VR.SQ); return; } Sequence seq = attrs.newSequence(sqtag, 10); String privateCreator = attrs.getPrivateCreator(sqtag); boolean undefLen = len == -1; long endPos = pos + (len & 0xffffffffL); boolean explicitVR0 = explicitVR; boolean bigEndian0 = bigEndian; if (encodedVR == 0x554e // UN && !probeExplicitVR()) { explicitVR = false; bigEndian = false; } for (int i = 0; (undefLen || pos < endPos) && readItemHeader(); ++i) { addItemPointer(sqtag, privateCreator, i); handler.readValue(this, seq); removeItemPointer(); } explicitVR = explicitVR0; bigEndian = bigEndian0; if (seq.isEmpty()) attrs.setNull(sqtag, VR.SQ); else seq.trimToSize(); }
/** Initializes the pixel data reading from an image input stream */ private void initPixelDataIIS(DicomInputStream dis) throws IOException { if( pixelDataLength==0 ) return; if( pixelDataLength>0 ) { pixelData = new BulkData("pixeldata://", dis.getPosition(), dis.length(),dis.bigEndian()); metadata.getAttributes().setValue(Tag.PixelData, pixelDataVR, pixelData); return; } dis.readItemHeader(); byte[] b = new byte[dis.length()]; dis.readFully(b); long start = dis.getPosition(); pixelDataFragments = new Fragments(pixelDataVR, dis.bigEndian(), frames); pixelDataFragments.add(b); generateOffsetLengths(pixelDataFragments, frames,b, start); }