Added support for slice / tested

This commit is contained in:
ebner 2015-04-14 10:38:38 +02:00
parent d7f6602944
commit 93885470e4
3 changed files with 57 additions and 18 deletions

View File

@ -5,10 +5,11 @@ import java.util.List;
import ncsa.hdf.object.Dataset;
public class SelectedDatasets {
public class DatasetSelection {
private List<Dataset> datasets = new ArrayList<Dataset>();
private boolean group = false;
private Integer slice;
public List<Dataset> 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;
}
}

View File

@ -68,7 +68,7 @@ public class HDF5Reader implements PlugIn {
file.open();
List<Dataset> 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<Dataset> datasets) throws HDF5Exception {
private DatasetSelection selectDatasets(List<Dataset> 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;

View File

@ -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;
}
}