From 93885470e4bec221023cbde9a57a39867a3f6107 Mon Sep 17 00:00:00 2001 From: ebner Date: Tue, 14 Apr 2015 10:38:38 +0200 Subject: [PATCH] Added support for slice / tested --- ...tedDatasets.java => DatasetSelection.java} | 10 +++- .../java/ch/psi/imagej/hdf5/HDF5Reader.java | 54 ++++++++++++++----- .../ch/psi/imagej/hdf5/SelectionPanel.java | 11 +++- 3 files changed, 57 insertions(+), 18 deletions(-) rename src/main/java/ch/psi/imagej/hdf5/{SelectedDatasets.java => DatasetSelection.java} (73%) diff --git a/src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java b/src/main/java/ch/psi/imagej/hdf5/DatasetSelection.java similarity index 73% rename from src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java rename to src/main/java/ch/psi/imagej/hdf5/DatasetSelection.java index f0e6695..94b1939 100644 --- a/src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java +++ b/src/main/java/ch/psi/imagej/hdf5/DatasetSelection.java @@ -5,10 +5,11 @@ import java.util.List; import ncsa.hdf.object.Dataset; -public class SelectedDatasets { +public class DatasetSelection { private List datasets = new ArrayList(); private boolean group = false; + private Integer slice; public List getDatasets() { return datasets; @@ -22,5 +23,10 @@ public class SelectedDatasets { public void setGroup(boolean group) { this.group = group; } - + public void setSlice(Integer slice) { + this.slice = slice; + } + public Integer getSlice() { + return slice; + } } diff --git a/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java b/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java index c4bcfbb..6992f34 100644 --- a/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java +++ b/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java @@ -68,7 +68,7 @@ public class HDF5Reader implements PlugIn { file.open(); List datasets = HDF5Utilities.getDatasets(file); - SelectedDatasets selectedDatasets = selectDatasets(datasets); + DatasetSelection selectedDatasets = selectDatasets(datasets); // TODO Remove @@ -217,19 +217,44 @@ public class HDF5Reader implements PlugIn { } else if (numberOfDimensions == 3) { logger.info("3D Image"); - // Select what to readout - long[] selected = var.getSelectedDims(); - selected[0] = dimensions[0]; - selected[1] = dimensions[1]; - selected[2] = dimensions[2]; + ImageStack stack; + + if(selectedDatasets.getSlice()!=null){ + + // Select what to readout + long[] selected = var.getSelectedDims(); + selected[0] = 1; + selected[1] = dimensions[1]; + selected[2] = dimensions[2]; + + long[] start = var.getStartDims(); + start[0] = selectedDatasets.getSlice(); - Object wholeDataset = var.read(); + Object wholeDataset = var.read(); + + stack = new ImageStack((int) dimensions[2], (int) dimensions[1]); + int size = (int) (dimensions[1] * dimensions[2]); + +// int startIdx = selectedDatasets.getSlice() * size; + addSlice(stack, wholeDataset, 0, size); + } + else{ + // Select what to readout + long[] selected = var.getSelectedDims(); + selected[0] = dimensions[0]; + selected[1] = dimensions[1]; + selected[2] = dimensions[2]; - ImageStack stack = new ImageStack((int) dimensions[2], (int) dimensions[1]); - int size = (int) (dimensions[1] * dimensions[2]); - for (int lev = 0; lev < dimensions[0]; ++lev) { - int startIdx = lev * size; - addSlice(stack, wholeDataset, startIdx, size); + + Object wholeDataset = var.read(); + + stack = new ImageStack((int) dimensions[2], (int) dimensions[1]); + int size = (int) (dimensions[1] * dimensions[2]); + + for (int lev = 0; lev < dimensions[0]; ++lev) { + int startIdx = lev * size; + addSlice(stack, wholeDataset, startIdx, size); + } } ImagePlus imp = new ImagePlus(filename + " " + datasetName, stack); @@ -279,7 +304,7 @@ public class HDF5Reader implements PlugIn { * @return List of datasets to visualize. If nothing selected the list will be empty * @throws HDF5Exception */ - private SelectedDatasets selectDatasets(List datasets) throws HDF5Exception { + private DatasetSelection selectDatasets(List datasets) throws HDF5Exception { GenericDialog gd = new GenericDialog("Variable Name Selection"); gd.addMessage("Please select variables to be loaded.\n"); @@ -292,10 +317,11 @@ public class HDF5Reader implements PlugIn { gd.pack(); gd.showDialog(); - SelectedDatasets selectedDatasets = new SelectedDatasets(); + DatasetSelection selectedDatasets = new DatasetSelection(); if (!gd.wasCanceled()) { selectedDatasets.setDatasets(panel.getSelectedValues()); selectedDatasets.setGroup(panel.groupValues()); + selectedDatasets.setSlice(panel.getSlice()); } return selectedDatasets; diff --git a/src/main/java/ch/psi/imagej/hdf5/SelectionPanel.java b/src/main/java/ch/psi/imagej/hdf5/SelectionPanel.java index 6847a02..6ef5d71 100644 --- a/src/main/java/ch/psi/imagej/hdf5/SelectionPanel.java +++ b/src/main/java/ch/psi/imagej/hdf5/SelectionPanel.java @@ -16,7 +16,6 @@ import javax.swing.ScrollPaneConstants; import ncsa.hdf.object.Dataset; import javax.swing.JTextField; -import javax.swing.JSpinner; import java.awt.FlowLayout; public class SelectionPanel extends JPanel { @@ -72,7 +71,7 @@ public class SelectionPanel extends JPanel { flowLayout.setAlignment(FlowLayout.LEFT); add(panel); - lblSlice = new JLabel("Slice:"); + lblSlice = new JLabel("Slice (3D only):"); panel.add(lblSlice); textField = new JTextField(); @@ -87,4 +86,12 @@ public class SelectionPanel extends JPanel { public boolean groupValues(){ return checkbox.isSelected(); } + + public Integer getSlice(){ + String text = textField.getText(); + if(text.matches("[0-9]+")){ + return new Integer(text); + } + return null; + } }