diff --git a/src/main/java/bdv/BigDataViewer.java b/src/main/java/bdv/BigDataViewer.java index 48b0c8f75ffd483f49036c3323af0e3af85dcb35..c83bd20ff02dcd6936121c10a33139ae9ead2f83 100644 --- a/src/main/java/bdv/BigDataViewer.java +++ b/src/main/java/bdv/BigDataViewer.java @@ -380,7 +380,8 @@ public class BigDataViewer public static void main( final String[] args ) { - final String fn = "/Users/pietzsch/desktop/data/catmaid-confocal.xml"; +// final String fn = "/Users/pietzsch/desktop/data/catmaid-confocal.xml"; + final String fn = "/home/saalfeld/catmaid-confocal.xml"; // final String fn = "/Users/pietzsch/desktop/data/BDV130418A325/BDV130418A325_NoTempReg.xml"; // final String fn = "/Users/pietzsch/Desktop/data/valia2/valia.xml"; // final String fn = "/Users/pietzsch/workspace/data/fast fly/111010_weber/combined.xml"; diff --git a/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java b/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java index b64a15b354766d34cca1c90dda9460cf856c2056..d8c12d39f6068135bbc0f652f856a181a0a2dd60 100644 --- a/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java +++ b/src/main/java/bdv/img/catmaid/CatmaidImageLoader.java @@ -84,7 +84,7 @@ public class CatmaidImageLoader implements ViewerImgLoader< ARGBType, VolatileAR final int[] maxLevels = new int[] { numScales - 1 }; cache = new VolatileGlobalCellCache< VolatileIntArray >( - new CatmaidVolatileIntArrayLoader( baseUrl, tileWidth, tileHeight ), 1, 1, numScales, maxLevels, 10 ); + new CatmaidVolatileIntArrayLoader( baseUrl + "%5$d/%8$d_%9$d_%1$d.jpg", tileWidth, tileHeight ), 1, 1, numScales, maxLevels, 10 ); } final static public int getNumScales( long width, long height, final long tileWidth, final long tileHeight ) diff --git a/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java b/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java index ebfe9e00359becc2cfc3e4c62f12a19b384dc398..c9dba0152173148ef56b7141486c0b71eda478d2 100644 --- a/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java +++ b/src/main/java/bdv/img/catmaid/CatmaidVolatileIntArrayLoader.java @@ -14,20 +14,50 @@ public class CatmaidVolatileIntArrayLoader implements CacheArrayLoader< Volatile { private VolatileIntArray theEmptyArray; - private final String baseUrl; - + private final String urlFormat; + private final int tileWidth; private final int tileHeight; - public CatmaidVolatileIntArrayLoader( final String baseUrl, final int tileWidth, final int tileHeight ) + /** + * <p>Create a {@link CacheArrayLoader} for a CATMAID source. Tiles are + * addressed, in this order, by their</p> + * <ul> + * <li>scale level,</li> + * <li>scale,</li> + * <li>x,</li> + * <li>y,</li> + * <li>z,</li> + * <li>tile width,</li> + * <li>tile height,</li> + * <li>tile row, and</li> + * <li>tile column.</li> + * </ul> + * <p><code>urlFormat</code> specifies how these parameters are used + * to generate a URL referencing the tile. Examples:</p> + * + * <dl> + * <dt>"http://catmaid.org/my-data/xy/%5$d/%8$d_%9$d_%1$d.jpg"</dt> + * <dd>CATMAID DefaultTileSource (type 1)</dd> + * <dt>"http://catmaid.org/my-data/xy/?x=%3$d&y=%4$d&width=%6d&height=%7$d&row=%8$d&col=%9$d&scale=%2$f&z=%4$d"</dt> + * <dd>CATMAID RequestTileSource (type 2)</dd> + * <dt>"http://catmaid.org/my-data/xy/%1$d/%5$d/%8$d/%9$d.jpg"</dt> + * <dd>CATMAID LargeDataTileSource (type 5)</dd> + * </dl> + * + * @param urlFormat + * @param tileWidth + * @param tileHeight + */ + public CatmaidVolatileIntArrayLoader( final String urlFormat, final int tileWidth, final int tileHeight ) { - theEmptyArray = new VolatileIntArray( 256 * 256, false ); - this.baseUrl = baseUrl; + theEmptyArray = new VolatileIntArray( tileWidth * tileHeight, false ); + this.urlFormat = urlFormat; this.tileWidth = tileWidth; this.tileHeight = tileHeight; } - + @Override public int getBytesPerElement() { @@ -35,24 +65,19 @@ public class CatmaidVolatileIntArrayLoader implements CacheArrayLoader< Volatile } @Override - public VolatileIntArray loadArray( final int timepoint, final int setup, final int level, final int[] dimensions, final long[] min ) throws InterruptedException + public VolatileIntArray loadArray( + final int timepoint, + final int setup, + final int level, + final int[] dimensions, + final long[] min ) throws InterruptedException { final int c = ( int ) min[ 0 ] / tileWidth; final int r = ( int ) min[ 1 ] / tileHeight; - final int z = ( int ) min[ 2 ]; - final int s = level; - final String urlString = - new - StringBuffer( baseUrl ). - append( z ). - append( "/" ). - append( r ). - append( "_" ). - append( c ). - append( "_" ). - append( s ). - append( ".jpg" ). - toString(); + final double scale = 1.0 / Math.pow(2.0, level); + + final String urlString = String.format( urlFormat, level, scale, min[ 0 ], min[ 1 ], min[ 2 ], tileWidth, tileHeight, r, c ); + final int w = dimensions[ 0 ]; final int h = dimensions[ 1 ]; final int[] data = new int[ w * h ];