Skip to content

Commit 62a2e99

Browse files
committed
Set voxel units to pixel in BioFormatsImageData, mobie/mobie-viewer-fiji#1247
1 parent 4b0ab08 commit 62a2e99

2 files changed

Lines changed: 42 additions & 4 deletions

File tree

src/main/java/org/embl/mobie/io/imagedata/BioFormatsImageData.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
import ch.epfl.biop.bdv.img.bioformats.BioFormatsHelper;
66
import ch.epfl.biop.bdv.img.opener.OpenerSettings;
77
import mpicbg.spim.data.generic.AbstractSpimData;
8+
import mpicbg.spim.data.generic.sequence.BasicViewSetup;
9+
import mpicbg.spim.data.sequence.FinalVoxelDimensions;
10+
import mpicbg.spim.data.sequence.VoxelDimensions;
811
import net.imglib2.type.NativeType;
912
import net.imglib2.type.numeric.NumericType;
1013

1114
import java.io.File;
15+
import java.lang.reflect.Method;
1216
import java.util.ArrayList;
17+
import java.util.Arrays;
1318
import java.util.List;
1419

1520
public class BioFormatsImageData< T extends NumericType< T > & NativeType< T > > extends SpimDataImageData< T >
@@ -48,16 +53,49 @@ public BioFormatsImageData( String uri, SharedQueue sharedQueue )
4853
.setSerie( i )
4954
.useBFMemo( false );
5055

51-
if ( usePixelUnits )
52-
settings.unit( "pixel" );
56+
// Throws NPE, https://github.com/mobie/mobie-viewer-fiji/issues/1247
57+
// if ( usePixelUnits )
58+
// settings.unit( "pixel" );
5359

5460
settingsList.add( settings );
5561
}
5662

57-
return OpenersToSpimData.getSpimData( settingsList );
63+
AbstractSpimData< ? > spimData = OpenersToSpimData.getSpimData( settingsList );
64+
65+
// Since the above throws a NPE, we resort to
66+
if ( usePixelUnits )
67+
setAllVoxelUnitsToPixel( spimData );
68+
69+
return spimData;
5870
}
5971
} );
6072
this.uri = uri;
6173
this.sharedQueue = sharedQueue;
6274
}
75+
76+
private static void setAllVoxelUnitsToPixel(AbstractSpimData<?> spimData) {
77+
78+
spimData.getSequenceDescription().getViewSetupsOrdered().forEach(setup -> {
79+
final Method setVoxelSize;
80+
try
81+
{
82+
setVoxelSize = BasicViewSetup.class.getDeclaredMethod("setVoxelSize", VoxelDimensions.class);
83+
}
84+
catch ( NoSuchMethodException ex )
85+
{
86+
throw new RuntimeException( ex );
87+
}
88+
setVoxelSize.setAccessible(true);
89+
90+
try {
91+
final double[] dims = new double[setup.getVoxelSize().numDimensions()];
92+
Arrays.fill(dims,1.0);
93+
setVoxelSize.invoke(setup, new FinalVoxelDimensions("pixel", dims));
94+
}
95+
catch ( Exception e )
96+
{
97+
throw new RuntimeException("Failed to set voxel size for setup " + setup.getId(), e);
98+
}
99+
});
100+
}
63101
}

src/test/java/org/embl/mobie/io/imagedata/BioFormatsImageDataTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public void openPNG()
2020
ImageDataFormat.fromPath( "src/test/resources/images/boats.png" ),
2121
new SharedQueue( 1 ) );
2222
VoxelDimensions voxelDimensions = imageData.getSourcePair( 0 ).getB().getVoxelDimensions();
23-
assertEquals( "px", voxelDimensions.unit() );
23+
assertEquals( "pixel", voxelDimensions.unit() );
2424
}
2525

2626
@Test

0 commit comments

Comments
 (0)