diff --git a/src/main/java/bdv/ij/OpenImagePlusPlugIn.java b/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
index 2251f36b0e38ceffc193b06523acbb722bf73d03..642284820afbec0694fdf9f3ad53481ff440337a 100644
--- a/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
+++ b/src/main/java/bdv/ij/OpenImagePlusPlugIn.java
@@ -96,40 +96,43 @@ public class OpenImagePlusPlugIn implements Command
AbstractSpimData< ? > spimData;
CacheControl cache = null;
+ int nTimepoints = 1;
int setup_id_offset = 0;
- ArrayList< ImagePlus > imgList = new ArrayList< ImagePlus >();
+ ArrayList< ImagePlus > imgList = new ArrayList<>();
for ( int i = 0; i < nImages; i++ )
{
if ( !gd.getNextBoolean() )
continue;
ImagePlus imp = WindowManager.getImage( idList[ i ] );
- imgList.add( imp );
spimData = load( imp, converterSetups, sources, setup_id_offset );
if ( spimData != null )
+ {
+ imgList.add( imp );
cache = ( ( ViewerImgLoader ) spimData.getSequenceDescription().getImgLoader() ).getCacheControl();
-
- setup_id_offset += imp.getNChannels();
+ setup_id_offset += imp.getNChannels();
+ nTimepoints = Math.max( nTimepoints, imp.getNFrames() );
+ }
}
- int nTimepoints = 1;
- final BigDataViewer bdv = BigDataViewer.open( converterSetups, sources,
- nTimepoints, cache,
- "BigDataViewer", new ProgressWriterIJ(), ViewerOptions.options() );
-
- final SetupAssignments sa = bdv.getSetupAssignments();
- final VisibilityAndGrouping vg = bdv.getViewer().getVisibilityAndGrouping();
- vg.setFusedEnabled( true );
-
- int channelOffset = 0;
- for ( ImagePlus imp : imgList )
+ if ( !imgList.isEmpty() )
{
- if ( imp.isComposite() )
- transferChannelSettings( channelOffset, ( CompositeImage ) imp, sa, vg );
- else
- transferImpSettings( channelOffset, imp, sa );
+ final BigDataViewer bdv = BigDataViewer.open( converterSetups, sources,
+ nTimepoints, cache,
+ "BigDataViewer", new ProgressWriterIJ(), ViewerOptions.options() );
- channelOffset += imp.getNChannels();
+ final SetupAssignments sa = bdv.getSetupAssignments();
+ final VisibilityAndGrouping vg = bdv.getViewer().getVisibilityAndGrouping();
+
+ int channelOffset = 0;
+ int numActiveChannels = 0;
+ for ( ImagePlus imp : imgList )
+ {
+ numActiveChannels += transferChannelVisibility( channelOffset, imp,vg );
+ transferChannelSettings( channelOffset, imp, sa );
+ channelOffset += imp.getNChannels();
+ }
+ vg.setDisplayMode( numActiveChannels > 1 ? DisplayMode.FUSED : DisplayMode.SINGLE );
}
}
@@ -145,14 +148,14 @@ public class OpenImagePlusPlugIn implements Command
case ImagePlus.COLOR_RGB:
break;
default:
- IJ.showMessage( "Only 8, 16, 32-bit images and RGB images are supported currently!" );
+ IJ.showMessage( imp.getShortTitle() + ": Only 8, 16, 32-bit images and RGB images are supported currently!" );
return null;
}
// check the image dimensionality
if ( imp.getNDimensions() < 3 )
{
- IJ.showMessage( "Image must be at least 3-dimensional!" );
+ IJ.showMessage( imp.getShortTitle() + ": Image must be at least 3-dimensional!" );
return null;
}
@@ -167,7 +170,7 @@ public class OpenImagePlusPlugIn implements Command
final int w = imp.getWidth();
final int h = imp.getHeight();
final int d = imp.getNSlices();
- final FinalDimensions size = new FinalDimensions( new int[] { w, h, d } );
+ final FinalDimensions size = new FinalDimensions( w, h, d );
// propose reasonable mipmap settings
// final ExportMipmapInfo autoMipmapSettings = ProposeMipmaps.proposeMipmaps( new BasicViewSetup( 0, "", size, voxelSize ) );
@@ -247,33 +250,65 @@ public class OpenImagePlusPlugIn implements Command
return spimData;
}
- protected void transferChannelSettings( int channelOffset, final CompositeImage ci, final SetupAssignments setupAssignments, final VisibilityAndGrouping visibility )
+ /**
+ * @return number of setups that were set active.
+ */
+ protected int transferChannelVisibility( int channelOffset, final ImagePlus imp, final VisibilityAndGrouping visibility )
{
- final int nChannels = ci.getNChannels();
- final int mode = ci.getCompositeMode();
- final boolean transferColor = mode == IJ.COMPOSITE || mode == IJ.COLOR;
- for ( int c = 0; c < nChannels; ++c )
- {
- final LUT lut = ci.getChannelLut( c + 1 );
- final ConverterSetup setup = setupAssignments.getConverterSetups().get( channelOffset + c );
- if ( transferColor )
- setup.setColor( new ARGBType( lut.getRGB( 255 ) ) );
- setup.setDisplayRange( lut.min, lut.max );
- }
- if ( mode == IJ.COMPOSITE )
+ final int nChannels = imp.getNChannels();
+ final CompositeImage ci = imp.isComposite() ? ( CompositeImage ) imp : null;
+ if ( ci != null && ci.getCompositeMode() == IJ.COMPOSITE )
{
final boolean[] activeChannels = ci.getActiveChannels();
+ int numActiveChannels = 0;
for ( int i = 0; i < activeChannels.length; ++i )
- visibility.setSourceActive( i, activeChannels[ i ] );
+ {
+ final int setup = channelOffset + i;
+ visibility.setSourceActive( setup, activeChannels[ i ] );
+ visibility.setCurrentSource( setup );
+ numActiveChannels += activeChannels[ i ] ? 1 : 0;
+ }
+ return numActiveChannels;
}
else
- visibility.setDisplayMode( DisplayMode.SINGLE );
- visibility.setCurrentSource( ci.getChannel() - 1 );
+ {
+ final int activeChannel = imp.getChannel() - 1;
+ for ( int i = 0; i < nChannels; ++i )
+ visibility.setSourceActive( channelOffset + i, i == activeChannel );
+ visibility.setCurrentSource( channelOffset + activeChannel );
+ return 1;
+ }
}
- protected void transferImpSettings( int setupIndex, final ImagePlus imp, final SetupAssignments setupAssignments )
+ protected void transferChannelSettings( int channelOffset, final ImagePlus imp, final SetupAssignments setupAssignments )
{
- final ConverterSetup setup = setupAssignments.getConverterSetups().get( setupIndex );
- setup.setDisplayRange( imp.getDisplayRangeMin(), imp.getDisplayRangeMax() );
+ final int nChannels = imp.getNChannels();
+ final CompositeImage ci = imp.isComposite() ? ( CompositeImage ) imp : null;
+ if ( ci != null )
+ {
+ final int mode = ci.getCompositeMode();
+ final boolean transferColor = mode == IJ.COMPOSITE || mode == IJ.COLOR;
+ for ( int c = 0; c < nChannels; ++c )
+ {
+ final LUT lut = ci.getChannelLut( c + 1 );
+ final ConverterSetup setup = setupAssignments.getConverterSetups().get( channelOffset + c );
+ if ( transferColor )
+ setup.setColor( new ARGBType( lut.getRGB( 255 ) ) );
+ setup.setDisplayRange( lut.min, lut.max );
+ }
+ }
+ else
+ {
+ final double displayRangeMin = imp.getDisplayRangeMin();
+ final double displayRangeMax = imp.getDisplayRangeMax();
+ for ( int i = 0; i < nChannels; ++i )
+ {
+ final ConverterSetup setup = setupAssignments.getConverterSetups().get( channelOffset + i );
+ final LUT[] luts = imp.getLuts();
+ if ( luts.length != 0 )
+ setup.setColor( new ARGBType( luts[ 0 ].getRGB( 255 ) ) );
+ setup.setDisplayRange( displayRangeMin, displayRangeMax );
+ }
+ }
}
}