public PixelData getHypercube(List<Integer> offset, List<Integer> size, List<Integer> step) throws IOException, DimensionsOutOfBoundsException { final BfPixelsWrapper reader = reader(); PixelData d; int hypercubeSize = RomioPixelBuffer.safeLongToInteger( getHypercubeSize(offset,size,step)); byte[] buffer = new byte[hypercubeSize]; reader.getHypercube(offset,size,step,buffer); d = new PixelData(reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; }
/** * If the pyramid file exists (which the constructor guarantees) then we * assume that even if a lock file is present, that it's no longer valid. */ protected synchronized void initializeReader() throws IOException, FormatException { File lockFile = lockFile(); if (readerFile.exists() && lockFile.exists()) { // note: we double checked readerFile exists just in case. lockFile.delete(); } reader = new OmeroPixelsPyramidReader(); delegate = new BfPixelBuffer(readerFile.getAbsolutePath(), reader); byteOrder = delegate.isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN; }
public synchronized byte[] calculateMessageDigest() throws IOException { return delegate().calculateMessageDigest(); }
/** * Helper method to properly log any exceptions raised by Bio-Formats. * @param filePath Non-null. * @param series series to use * @return the initialized {@link BfPixelBuffer} */ protected BfPixelBuffer createBfPixelBuffer(final String filePath, final int series) { try { IFormatReader reader = createBfReader(); BfPixelBuffer pixelBuffer = new BfPixelBuffer(filePath, reader); pixelBuffer.setSeries(series); log.info(String.format("Creating BfPixelBuffer: %s Series: %d", filePath, series)); return pixelBuffer; } catch (Exception e) { String msg = "Error instantiating pixel buffer: " + filePath; log.error(msg, e); throw new ResourceError(msg); } }
public PixelData getCol(Integer x, Integer z, Integer c, Integer t) throws IOException, DimensionsOutOfBoundsException { final BfPixelsWrapper reader = reader(); PixelData d; byte[] buffer = new byte[reader.getColSize()]; reader.getCol(x,z,c,t,buffer); d = new PixelData(reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; }
public synchronized boolean isLittleEndian() { return delegate().isLittleEndian(); }
public PixelData getPlaneRegion(Integer x, Integer y, Integer width, Integer height, Integer z, Integer c, Integer t, Integer stride) throws IOException, DimensionsOutOfBoundsException { List<Integer> offset = Arrays.asList(new Integer[]{x,y,z,c,t}); List<Integer> size = Arrays.asList(new Integer[]{width,height,1,1,1}); List<Integer> step = Arrays.asList(new Integer[]{stride+1,stride+1,1,1,1}); return getHypercube(offset, size, step); }
public synchronized int getByteWidth() { return delegate().getByteWidth(); }
public synchronized Integer getColSize() { return delegate().getColSize(); }
public synchronized void checkBounds(Integer x, Integer y, Integer z, Integer c, Integer t) throws DimensionsOutOfBoundsException { t = getRasterizedT(z, c, t); c = 0; z = 0; delegate().checkBounds(x, y, z, c, t); }
public synchronized byte[] getColDirect(Integer x, Integer z, Integer c, Integer t, byte[] buffer) throws IOException, DimensionsOutOfBoundsException { t = getRasterizedT(z, c, t); c = 0; z = 0; return delegate().getColDirect(x, z, c, t, buffer); }
public synchronized void close() throws IOException { try { if (delegate != null) { delegate.close(); } } catch (IOException e) { log.error("Failure to close delegate.", e); } delegate = null; if (reader != null) { try { reader.close(); } catch (Exception e) { log.warn("Failed to close reader", e); } finally { reader = null; } } closeWriter(); }
public synchronized PixelData getCol(Integer x, Integer z, Integer c, Integer t) throws IOException, DimensionsOutOfBoundsException { t = getRasterizedT(z, c, t); c = 0; z = 0; PixelData data = delegate().getCol(x, z, c, t); data.setOrder(byteOrder); return data; }
public PixelData getRow(Integer y, Integer z, Integer c, Integer t) throws IOException, DimensionsOutOfBoundsException { final BfPixelsWrapper reader = reader(); PixelData d; byte[] buffer = new byte[reader.getRowSize()]; reader.getRow(y,z,c,t,buffer); d = new PixelData(reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; }
/** * Returns whether or not the pixels set is little endian. * @param pixels The pixels set to handle * @return See above. */ private boolean isLittleEndian(Pixels pixels) { try { //TODO: review after work on OmeroPyramidWriter PixelBuffer pf = pixelsService._getPixelBuffer(pixels, false); if (pf instanceof BfPixelsWrapper) { return ((BfPixelsWrapper) pf).isLittleEndian(); } if (pf instanceof BfPyramidPixelBuffer) { return ((BfPyramidPixelBuffer) pf).isLittleEndian(); } if (pf instanceof BfPixelBuffer) { return ((BfPixelBuffer) pf).isLittleEndian(); } } catch (Exception e) { log.debug("Error instantiating pixel buffer", e); } return false; }
/** * Helper method to properly log any exceptions raised by Bio-Formats and * add a min/max calculator wrapper to the reader stack. * @param filePath Non-null. * @param series series to use * @param store Min/max store to use with the min/max calculator. */ protected BfPixelBuffer createMinMaxBfPixelBuffer(final String filePath, final int series, final IMinMaxStore store) { try { IFormatReader reader = createBfReader(); MinMaxCalculator calculator = new MinMaxCalculator(reader); calculator.setMinMaxStore(store); BfPixelBuffer pixelBuffer = new BfPixelBuffer(filePath, calculator); pixelBuffer.setSeries(series); log.info(String.format("Creating BfPixelBuffer: %s Series: %d", filePath, series)); return pixelBuffer; } catch (Exception e) { String msg = "Error instantiating pixel buffer: " + filePath; log.error(msg, e); throw new ResourceError(msg); } }
public PixelData getStack(Integer c, Integer t) throws IOException, DimensionsOutOfBoundsException { final BfPixelsWrapper reader = reader(); PixelData d; int size = RomioPixelBuffer.safeLongToInteger(reader.getStackSize()); byte[] buffer = new byte[size]; reader.getStack(c,t,buffer); d = new PixelData(reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; }
originalFilePath, series, minMaxStore); pixelsPyramid.setByteOrder( bfPixelBuffer.isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); source = bfPixelBuffer;
public PixelData getTile(Integer z, Integer c, Integer t, Integer x, Integer y, Integer w, Integer h) throws IOException { final BfPixelsWrapper reader = reader(); byte[] buffer = new byte[ w * h * FormatTools.getBytesPerPixel(reader.getPixelsType())]; try { // Call getTile on reader() rather than on this // so as not to swap the bytes twice. reader().getTile(z, c, t, x, y, w, h, buffer); PixelData d = new PixelData( reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; } catch (FormatException e) { throw new RuntimeException(e); } }
public PixelData getTimepoint(Integer t) throws IOException, DimensionsOutOfBoundsException { final BfPixelsWrapper reader = reader(); PixelData d; int size = RomioPixelBuffer.safeLongToInteger( reader.getTimepointSize()); byte[] buffer = new byte[size]; reader.getTimepoint(t,buffer); d = new PixelData(reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; }