public BfPixelsStoreI(String path, ImageReader bfReader) throws IOException, FormatException { reader = new BfPixelsWrapper(path, bfReader); }
public void close() throws IOException { BfPixelsWrapper wrapper = reader.get(); if (wrapper != null) { try { wrapper.close(); } catch (RuntimeException|IOException ex) { log.error("Failed to close BfPixelsWrapper", ex); throw ex; } finally { reader.set(null); } } }
public byte[] getCol(Integer x, Integer z, Integer c, Integer t, byte[] buffer) throws IOException, DimensionsOutOfBoundsException { checkBounds(x, null, z, c, t); try { if (buffer.length != getColSize()) throw new RuntimeException("Buffer size incorrect."); int size = RomioPixelBuffer.safeLongToInteger(getPlaneSize()); byte[] plane = new byte[size]; getWholePlane(z,c,t,plane); for(int y = 0; y < reader.getSizeY(); y++) { System.arraycopy(plane, (y*getRowSize())+(x*getByteWidth()), buffer, y*getByteWidth(), getByteWidth()); } } catch (FormatException e) { throw new RuntimeException(e); } return buffer; }
public Long getRowOffset(Integer y, Integer z, Integer c, Integer t) throws DimensionsOutOfBoundsException { checkBounds(null, y, z, c, t); return (long) getPlaneOffset(z,c,t) + y * getRowSize(); }
public Integer getColSize() { return getSizeY() * getByteWidth(); }
public Integer getRowSize() { return getSizeX() * getByteWidth(); }
int cubeOffset = 0; int xStripes = (size.get(0) + step.get(0) - 1) / step.get(0); int tileRowSize = getByteWidth() * xStripes; int planeSize = RomioPixelBuffer.safeLongToInteger(getPlaneSize()); byte[] plane = new byte[planeSize]; for(int t = offset.get(4); t < size.get(4)+offset.get(4); t += step.get(4)) getWholePlane(z,c,t,plane); int rowOffset = offset.get(1)*getRowSize(); if(step.get(0)==1) int byteOffset = rowOffset + offset.get(0)*getByteWidth(); for(int y = offset.get(1); y < size.get(1)+offset.get(1); y += step.get(1)) byteOffset += getRowSize()*step.get(1); int byteOffset = offset.get(0)*getByteWidth(); for(int x = offset.get(0); x < size.get(0)+offset.get(0); x += step.get(0)) System.arraycopy(plane, rowOffset+byteOffset, cube, cubeOffset, getByteWidth()); cubeOffset += getByteWidth(); byteOffset += step.get(0)*getByteWidth(); rowOffset += getRowSize()*step.get(1);
public void getCol_async(AMD_RawPixelsStore_getCol __cb, int x, int z, int c, int t, Current __current) throws ServerError { try { byte[] col = new byte[reader.getColSize()]; reader.getCol(x,z,c,t,col); reader.swapIfRequired(col); __cb.ice_response(col); } catch (Exception e) { __cb.ice_exception(e); } }
public void getPlane_async(AMD_RawPixelsStore_getPlane __cb, int z, int c, int t, Current __current) throws ServerError { try { int size = RomioPixelBuffer.safeLongToInteger( reader.getPlaneSize()); byte[] plane = new byte[size]; reader.getPlane(z,c,t,plane); reader.swapIfRequired(plane); __cb.ice_response(plane); } catch (Exception e) { __cb.ice_exception(e); } }
public void getHypercube_async(AMD_RawPixelsStore_getHypercube __cb, List<Integer> offset, List<Integer> size, List<Integer> step, Current __current) throws ServerError { try { int hypercubeSize = RomioPixelBuffer.safeLongToInteger( reader.getHypercubeSize(offset,size,step)); byte[] cube = new byte[hypercubeSize]; reader.getHypercube(offset,size,step,cube); reader.swapIfRequired(cube); __cb.ice_response(cube); } catch (Exception e) { __cb.ice_exception(e); } }
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 PixelData getPlane(Integer z, Integer c, Integer t) throws IOException, DimensionsOutOfBoundsException { final BfPixelsWrapper reader = reader(); PixelData d; int size = RomioPixelBuffer.safeLongToInteger(reader.getPlaneSize()); byte[] buffer = new byte[size]; reader.getPlane(z,c,t,buffer); d = new PixelData(reader.getPixelsType(), ByteBuffer.wrap(buffer)); d.setOrder(isLittleEndian()? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN); return d; }
public byte[] getPlaneDirect(Integer z, Integer c, Integer t, byte[] buffer) throws IOException, DimensionsOutOfBoundsException { try { final BfPixelsWrapper reader = reader(); reader.getPlane(z,c,t,buffer); reader.swapIfRequired(buffer); } catch (FormatException e) { throw new RuntimeException(e); } return buffer; }
public byte[] getHypercubeDirect(List<Integer> offset, List<Integer> size, List<Integer> step, byte[] buffer) throws IOException, DimensionsOutOfBoundsException { try { final BfPixelsWrapper reader = reader(); reader.getHypercube(offset,size,step,buffer); reader.swapIfRequired(buffer); } catch (FormatException e) { throw new RuntimeException(e); } return buffer; }
public byte[] getColDirect(Integer x, Integer z, Integer c, Integer t, byte[] buffer) throws IOException, DimensionsOutOfBoundsException { try { final BfPixelsWrapper reader = reader(); reader.getCol(x,z,c,t,buffer); reader.swapIfRequired(buffer); } catch (FormatException e) { throw new RuntimeException(e); } return buffer; }
wrapper = new BfPixelsWrapper(filePath, bfReader); } catch (FormatException fe) { log.debug("FormatException: " + filePath, fe); wrapper.close(); } catch (IOException ex) { log.error("Failed to close BfPixelsWrapper", ex);
private byte[] getWholePlane(int z, int c, int t, byte[] plane) throws IOException, FormatException { int planeNumber; if (reader.getRGBChannelCount() == 1) { planeNumber = reader.getIndex(z, c, t); reader.openBytes(planeNumber, plane); } else { int size = RomioPixelBuffer.safeLongToInteger(getPlaneSize()); byte[] fullPlane = new byte[size*reader.getRGBChannelCount()]; planeNumber = reader.getIndex(z, 0, t); reader.openBytes(planeNumber, fullPlane); if(reader.isInterleaved()) { for(int p = 0; p < size; p += getByteWidth()) { System.arraycopy(fullPlane, c*getByteWidth() + p*reader.getRGBChannelCount(), plane, p, getByteWidth()); } } else { System.arraycopy(fullPlane, c*size, plane, 0, size); } } return plane; }
public byte[] getHypercube(List<Integer> offset, List<Integer> size, List<Integer> step, byte[] buffer) throws IOException, DimensionsOutOfBoundsException { if (buffer.length != getHypercubeSize(offset, size, step)) throw new RuntimeException("Buffer size incorrect."); try { getWholeHypercube(offset,size,step,buffer); } catch (FormatException e) { throw new RuntimeException(e); } return buffer; }
public Long getHypercubeSize(List<Integer> offset, List<Integer> size, List<Integer> step) throws DimensionsOutOfBoundsException { // only works for 5d at present checkCubeBounds(offset, size, step); int tStripes = (size.get(4) + step.get(4) - 1) / step.get(4); int cStripes = (size.get(3) + step.get(3) - 1) / step.get(3); int zStripes = (size.get(2) + step.get(2) - 1) / step.get(2); int yStripes = (size.get(1) + step.get(1) - 1) / step.get(1); int xStripes = (size.get(0) + step.get(0) - 1) / step.get(0); long tileRowSize = (long) getByteWidth() * xStripes; long cubeSize = tileRowSize * yStripes * zStripes * cStripes * tStripes; return cubeSize; }
public int getByteWidth() { return reader().getByteWidth(); }