2222 */
2323package net .preibisch .mvrecon .fiji .spimdata .explorer .popup ;
2424
25+ import java .awt .Color ;
2526import java .awt .event .ActionEvent ;
2627import java .awt .event .ActionListener ;
2728import java .util .ArrayList ;
29+ import java .util .Arrays ;
30+ import java .util .HashMap ;
2831
2932import javax .swing .JMenu ;
3033import javax .swing .JMenuItem ;
31- import javax .swing .JOptionPane ;
34+ import javax .swing .event .MenuEvent ;
35+ import javax .swing .event .MenuListener ;
3236
37+ import mpicbg .spim .data .sequence .ImgLoader ;
38+ import mpicbg .spim .data .sequence .MultiResolutionImgLoader ;
39+ import mpicbg .spim .data .sequence .MultiResolutionSetupImgLoader ;
40+ import mpicbg .spim .data .sequence .ViewId ;
41+ import net .imglib2 .RandomAccessibleInterval ;
3342import net .preibisch .legacy .io .IOFunctions ;
34- import net .preibisch .mvrecon .fiji .plugin .Display_View ;
3543import net .preibisch .mvrecon .fiji .spimdata .SpimData2 ;
3644import net .preibisch .mvrecon .fiji .spimdata .explorer .ExplorerWindow ;
37-
38- import mpicbg . spim . data . sequence . ViewId ;
45+ import net . preibisch . mvrecon . process . export . DisplayImage ;
46+ import net . preibisch . mvrecon . process . fusion . FusionTools ;
3947
4048public class DisplayRawImagesPopup extends JMenu implements ExplorerWindowSetable
4149{
42- public static final int askWhenMoreThan = 5 ;
4350 private static final long serialVersionUID = 5234649262342301390L ;
4451
4552 ExplorerWindow < ? > panel = null ;
@@ -48,14 +55,104 @@ public DisplayRawImagesPopup()
4855 {
4956 super ( "Display Raw Image(s)" );
5057
51- final JMenuItem as32bit = new JMenuItem ( "As 32-Bit ImageJ Stack" );
52- final JMenuItem as16bit = new JMenuItem ( "As 16-Bit ImageJ Stack" );
58+ final JMenuItem asFullStack = new JMenuItem ( "Full-resolution as ImageJ Stack" );
59+ asFullStack .addActionListener ( new MyActionListener ( 0 ) );
60+ this .add ( asFullStack );
5361
54- as16bit .addActionListener ( new MyActionListener ( true ) );
55- as32bit .addActionListener ( new MyActionListener ( false ) );
62+ final JMenu asStack = new JMenu ( "As ImageJ Stack at level" );
63+
64+ asStack .addMenuListener ( new MenuListener ()
65+ {
66+ @ Override
67+ public void menuSelected ( MenuEvent e )
68+ {
69+ asStack .removeAll ();
5670
57- this .add ( as16bit );
58- this .add ( as32bit );
71+ final SpimData2 spimData = (SpimData2 )panel .getSpimData ();
72+
73+ final ArrayList < ViewId > views = new ArrayList <>();
74+ views .addAll ( ApplyTransformationPopup .getSelectedViews ( panel ) );
75+
76+ // filter not present ViewIds
77+ SpimData2 .filterMissingViews ( spimData , views );
78+
79+ if ( views .size () == 0 )
80+ {
81+ JMenuItem item = new JMenuItem ( "No views selected." );
82+ item .setForeground ( Color .GRAY );
83+ asStack .add ( item );
84+ return ;
85+ }
86+
87+ if ( MultiResolutionImgLoader .class .isInstance ( spimData .getSequenceDescription ().getImgLoader () ))
88+ {
89+ final MultiResolutionImgLoader mrLoader = (MultiResolutionImgLoader )spimData .getSequenceDescription ().getImgLoader ();
90+
91+ HashMap < Integer , long [] > levelToSize = null ;
92+
93+ boolean consistent = true ;
94+ boolean consistentSizes = true ;
95+
96+ for ( final ViewId v : views )
97+ {
98+ if ( !consistent )
99+ break ;
100+
101+ final MultiResolutionSetupImgLoader <?> il = mrLoader .getSetupImgLoader ( v .getViewSetupId () );
102+ final int levels = il .getMipmapTransforms ().length ;
103+
104+ if ( levelToSize == null )
105+ {
106+ levelToSize = new HashMap <>();
107+
108+ for ( int level = 0 ; level < levels ; ++level )
109+ levelToSize .put ( level , il .getImageSize ( v .getTimePointId (), level ).dimensionsAsLongArray () );
110+ }
111+ else
112+ {
113+ if ( levels != levelToSize .size () )
114+ consistent = false ;
115+ else
116+ for ( int level = 0 ; level < levels ; ++level )
117+ if ( !Arrays .equals ( levelToSize .get ( level ), il .getImageSize ( v .getTimePointId (), level ).dimensionsAsLongArray () ) )
118+ consistentSizes = false ;
119+ }
120+ }
121+
122+ if ( levelToSize != null && consistent )
123+ {
124+ for ( int level = 0 ; level < levelToSize .size (); ++level )
125+ {
126+ JMenuItem item = new JMenuItem ( "Level " + level + (consistentSizes ? " " + Arrays .toString ( levelToSize .get ( level ) ) : " [image sizes vary]" ) );
127+ item .addActionListener ( new MyActionListener ( level ) );
128+ asStack .add ( item );
129+ }
130+ }
131+ else
132+ {
133+ JMenuItem item = new JMenuItem ( "MultiResolution levels vary across selected views" );
134+ item .setForeground ( Color .GRAY );
135+ asStack .add ( item );
136+ }
137+ //JMenuItem item = new JMenuItem( labels[ i ] );
138+ //item.addActionListener( new HistogramListener( spimData, views, InterestPointTools.getSelectedLabel( labels, i ), i ) );
139+ //asStack.add( item );
140+ }
141+ else
142+ {
143+ JMenuItem item = new JMenuItem ( "No MultiResolutionImgLoader" );
144+ item .setForeground ( Color .GRAY );
145+ asStack .add ( item );
146+ }
147+ }
148+
149+ @ Override
150+ public void menuDeselected ( MenuEvent e ) {}
151+
152+ @ Override
153+ public void menuCanceled ( MenuEvent e ) {}
154+ } );
155+ this .add ( asStack );
59156 }
60157
61158 @ Override
@@ -68,11 +165,10 @@ public JMenuItem setExplorerWindow( final ExplorerWindow< ? > panel )
68165
69166 public class MyActionListener implements ActionListener
70167 {
71- final boolean as16bit ;
72-
73- public MyActionListener ( final boolean as16bit )
168+ final int level ;
169+ public MyActionListener ( final int level )
74170 {
75- this .as16bit = as16bit ;
171+ this .level = level ;
76172 }
77173
78174 @ Override
@@ -92,33 +188,33 @@ public void run()
92188 final ArrayList < ViewId > views = new ArrayList <>();
93189 views .addAll ( ApplyTransformationPopup .getSelectedViews ( panel ) );
94190
95- // filter not present ViewIds
96- SpimData2 . filterMissingViews ( panel . getSpimData (), views );
191+ final SpimData2 data = panel . getSpimData ();
192+ final ImgLoader il = data . getSequenceDescription (). getImgLoader ( );
97193
194+ // filter not present ViewIds
195+ SpimData2 .filterMissingViews ( data , views );
98196
99- if (
100- views .size () > askWhenMoreThan &&
101- JOptionPane .showConfirmDialog (
102- null ,
103- "Are you sure to display " + views .size () + " views?" ,
104- "Warning" ,
105- JOptionPane .YES_NO_OPTION ) == JOptionPane .NO_OPTION )
197+ if ( views .size () == 0 )
198+ {
199+ IOFunctions .println ( "No views selected" );
106200 return ;
201+ }
107202
108- IOFunctions .println (
109- "Opening as" + ( as16bit ? " 16 bit" : "32 bit" ) + " using " +
110- panel .getSpimData ().getSequenceDescription ().getImgLoader ().getClass ().getSimpleName () );
203+ IOFunctions .println ( "ImageLoader: " + il .getClass ().getSimpleName () );
111204
112205 for ( final ViewId view : views )
113206 {
114207 IOFunctions .println ( "Loading timepoint: " + view .getTimePointId () + " ViewSetup: " + view .getViewSetupId () );
115-
116208 final String name = "Timepoint: " + view .getTimePointId () + " ViewSetup: " + view .getViewSetupId ();
117-
118- if ( as16bit )
119- Display_View .display ( panel .getSpimData (), view , 1 , name );
209+
210+ final RandomAccessibleInterval image ;
211+
212+ if ( level <= 0 )
213+ image = il .getSetupImgLoader ( view .getViewSetupId () ).getImage ( view .getTimePointId () );
120214 else
121- Display_View .display ( panel .getSpimData (), view , 0 , name );
215+ image = ((MultiResolutionImgLoader )il ).getSetupImgLoader ( view .getViewSetupId () ).getImage ( view .getTimePointId (), level );
216+
217+ FusionTools .getImagePlusInstance ( image , true , name , 0 , 255 , DisplayImage .service ).show ();
122218 }
123219 }
124220 } ).start ();
0 commit comments