private BulkData extractPixelData(BulkData src, int frame, int length) { return new BulkData(src.uriWithoutOffsetAndLength(), src.offset() + frame * length, length, src.bigEndian()); }
public InputStream openStream() throws IOException { if (uri == null) throw new IllegalStateException("uri: null"); if (!uri.startsWith("file:")) return new URL(uri).openStream(); InputStream in = new FileInputStream(getFile()); StreamUtils.skipFully(in, offset); return in; }
/** Returns the index after the segment ends */ public long getSegmentEnd() { if( length==-1 ) return -1; return offset() + longLength(); }
private void setPixelDataBulkData(VR vr) { if (pixelDataBulkDataURI != null) dataset.setValue(Tag.PixelData, vr, new BulkData(null, pixelDataBulkDataURI, false)); }
private void saveAudioFile(DicomSpecialElement media) { AudioData audioData = getAudioData(media); if (audioData != null) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setAcceptAllFileFilterUsed(false); FileFormatFilter filter = new FileFormatFilter("au", "AU"); //$NON-NLS-1$ //$NON-NLS-2$ fileChooser.addChoosableFileFilter(filter); fileChooser.addChoosableFileFilter(new FileFormatFilter("wav", "WAVE")); //$NON-NLS-1$ //$NON-NLS-2$ fileChooser.setFileFilter(filter); if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { if (fileChooser.getSelectedFile() != null) { File file = fileChooser.getSelectedFile(); filter = (FileFormatFilter) fileChooser.getFileFilter(); String extension = filter == null ? ".au" : "." + filter.getDefaultExtension(); //$NON-NLS-1$ //$NON-NLS-2$ String filename = file.getName().endsWith(extension) ? file.getPath() : file.getPath() + extension; try (AudioInputStream audioStream = new AudioInputStream(audioData.bulkData.openStream(), audioData.audioFormat, audioData.bulkData.length() / audioData.audioFormat.getFrameSize())) { if (".wav".equals(extension)) { //$NON-NLS-1$ AudioSystem.write(audioStream, AudioFileFormat.Type.WAVE, new File(filename)); } else { AudioSystem.write(audioStream, AudioFileFormat.Type.AU, new File(filename)); } } catch (IOException ex) { LOGGER.error("Cannot save audio file!", ex); //$NON-NLS-1$ } } } } }
public BufferedImage readFrame(int frameIndex) throws IOException { if (iis == null) iis = new FileImageInputStream(file); if (decompressor != null) return decompressFrame(iis, frameIndex); iis.setByteOrder(pixeldata.bigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN); iis.seek(pixeldata.offset() + frameLength * frameIndex); DataBuffer db = bi.getRaster().getDataBuffer(); switch (db.getDataType()) { case DataBuffer.TYPE_BYTE: byte[][] data = ((DataBufferByte) db).getBankData(); for (byte[] bs : data) iis.readFully(bs); if (pixeldata.bigEndian() && pixeldataVR.vr == VR.OW) ByteUtils.swapShorts(data); break; case DataBuffer.TYPE_USHORT: readFully(((DataBufferUShort) db).getData()); break; case DataBuffer.TYPE_SHORT: readFully(((DataBufferShort) db).getData()); break; default: throw new UnsupportedOperationException( "Unsupported Datatype: " + db.getDataType()); } return bi; }
BulkData readBulkAt(long testOffset, int at) throws IOException { byte[] data = new byte[8]; stream.seek(testOffset); int size = stream.read(data); if( size<8 ) return null; int tag =ByteUtils.bytesToTagLE(data, 0); if( tag==Tag.SequenceDelimitationItem ) { // Safe to read un-protected now as we know there are no more items to update. lastSegment = fragments.size(); return null; } if( tag!=Tag.Item ) { throw new IOException("At "+testOffset+" isn't an Item("+Integer.toHexString(Tag.Item)+"), but is "+Integer.toHexString(tag)); } int itemLen = ByteUtils.bytesToIntLE(data, 4); BulkData bulk; synchronized(fragments) { if( at < fragments.size() ) { bulk = (BulkData) fragments.get(at); bulk.setOffset(testOffset+8); bulk.setLength(itemLen); } else { bulk = new BulkData("compressedPixelData://", testOffset+8,itemLen,false); fragments.add(bulk); } } return bulk; }
public Compressor(Attributes dataset, String from) { super(dataset, from); Object pixeldata = dataset.getValue(Tag.PixelData, pixeldataVR); if (pixeldata == null) return; if (pixeldata instanceof BulkData) { this.pixeldata = (BulkData) pixeldata; if (pmi.isSubSambled()) throw new UnsupportedOperationException( "Unsupported Photometric Interpretation: " + pmi); if (this.pixeldata.length() < length) throw new IllegalArgumentException( "Pixel data too short: " + this.pixeldata.length() + " instead " + length + " bytes"); } embeddedOverlays = Overlays.getEmbeddedOverlayGroupOffsets(dataset); }
? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN); iis.seek(pixelData.offset() + frameIndex * frameLength);
@Override public byte[] toBytes(VR vr, boolean bigEndian) throws IOException { if (length == -1) throw new UnsupportedOperationException(); if (length == 0) return ByteUtils.EMPTY_BYTES; InputStream in = openStream(); try { byte[] b = new byte[length]; StreamUtils.readFully(in, b, 0, b.length); if (this.bigEndian != bigEndian) { vr.toggleEndian(b, false); } return b; } finally { in.close(); } }
private void writeBulkData(BulkData blkdata) { gen.write("BulkDataURI", replaceBulkDataURI != null ? replaceBulkDataURI : blkdata.getURI()); }
private void bulkData(String uuid, String uri) { bulkData = new BulkData(uuid, uri, items.getLast().bigEndian()); }
offset = pixelData.offset()+pixelData.longLength(); } else { SegmentedInputImageStream siis = (SegmentedInputImageStream) iisOfFrame(-1);
try (AudioInputStream audioStream = new AudioInputStream(audioData.bulkData.openStream(), audioData.audioFormat, audioData.bulkData.length() / audioData.audioFormat.getFrameSize())) { DataLine.Info info = new DataLine.Info(Clip.class, audioStream.getFormat()); clip = (Clip) AudioSystem.getLine(info);
private void initPixelDataFromAttributes(Attributes ds) { VR.Holder holder = new VR.Holder(); Object value = ds.getValue(Tag.PixelData, holder); if (value != null) { imageDescriptor = new ImageDescriptor(ds); pixelDataVR = holder.vr; if (value instanceof BulkData) { pixelData = (BulkData) value; pixelDataLength = pixelData.length(); } else if( value instanceof byte[] ) { pixeldataBytes = (byte[]) value; pixelDataLength = pixeldataBytes.length; } else { // value instanceof Fragments pixelDataFragments = (Fragments) value; pixelDataLength = -1; } } }
@Override public void writeTo(DicomOutputStream out, VR vr) throws IOException { InputStream in = openStream(); try { if (this.bigEndian != out.isBigEndian()) StreamUtils.copy(in, out, length, vr.numEndianBytes()); else StreamUtils.copy(in, out, length); if ((length & 1) != 0) out.write(vr.paddingByte()); } finally { in.close(); } }