/** * This method gets the encoded image from the given object as a byte array * of data. */ protected byte[] extractImageEncoding(IIOImage iioimage, ImageWriteParam param) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); MemoryCacheImageOutputStream imageOutput = new MemoryCacheImageOutputStream( baos); writer.setOutput(imageOutput); writer.write(null, iioimage, writeParam); imageOutput.close(); baos.close(); byte[] data = baos.toByteArray(); // Write little endian raw data if( (!encapsulated) && bytes==2 && ! dos.getTransferSyntax().bigEndian() ) { for(int i=0; i<data.length; i+=2) { byte swap = data[i]; data[i] = data[i+1]; data[i+1] = swap; } } return data; }
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 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); } } }