Skip to content
Snippets Groups Projects
Select Git revision
  • 573e6a74f490ffb58956ebc8fd2648bde2aa8078
  • master default protected
  • extended_loader_api_no_scifio
  • extended_loader_api
  • plugin_support
  • kd-tree
  • basic_app
7 results

BasicLoader.java

Blame
  • BasicLoader.java 16.02 KiB
    package azgracompress.io.loader;
    
    import azgracompress.data.*;
    
    import java.io.IOException;
    
    public abstract class BasicLoader {
        protected final V3i dims;
        protected int threadCount = 1;
    
        private DataWrappingStrategy wrappingStrategy = DataWrappingStrategy.MirroredRepeat;
    
        protected BasicLoader(final V3i datasetDims) {
            this.dims = datasetDims;
        }
    
        public V3i getImageDimensions() {
            return dims;
        }
    
    
        public DataWrappingStrategy getWrappingStrategy() {
            return wrappingStrategy;
        }
    
        public void setWrappingStrategy(final DataWrappingStrategy strategy) {
            wrappingStrategy = strategy;
        }
    
    
        /**
         * Abstract method to load specified plane data.
         *
         * @param plane Zero based plane index.
         * @return Plane data.
         * @throws IOException when fails to load plane data for some reason.
         */
        public abstract int[] loadPlaneData(final int plane) throws IOException;
    
        protected int valueAt(final int plane, final int offset) {
            new Exception().printStackTrace(System.err);
            assert (false) : "Unimplemented overload of BasicLoader::valueAt()";
            return Integer.MIN_VALUE;
        }
    
        protected int[][] loadRowVectorsImplByLoadPlaneData(final int vectorSize, final Range<Integer> planeRange) throws IOException {
            final int rowVectorCount = (int) Math.ceil((double) dims.getX() / (double) vectorSize);
            final int planeCount = planeRange.getTo() - planeRange.getFrom();
            final int vectorCount = planeCount * dims.getY() * rowVectorCount;
            final int[][] rowVectors = new int[vectorCount][vectorSize];
    
            int vectorIndex = 0;
            int baseX;
    
            for (int plane = planeRange.getFrom(); plane < planeRange.getTo(); plane++) {
                final int[] planeData = loadPlaneData(plane);
                for (int row = 0; row < dims.getY(); row++) {
                    for (int rowVectorIndex = 0; rowVectorIndex < rowVectorCount; rowVectorIndex++) {
                        // Copy single vector.
                        baseX = rowVectorIndex * vectorSize;
    
                        for (int vectorX = 0; vectorX < vectorSize; vectorX++) {
                            if ((baseX + vectorX) >= dims.getY())
                                break;
                            rowVectors[vectorIndex][vectorX] = planeData[Block.index((baseX + vectorX), row, dims.getX())];
                        }
                        ++vectorIndex;
                    }
                }
            }