diff --git a/pom.xml b/pom.xml
index fa54f36..e838742 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,6 +68,9 @@
Kun Liu
+
+ Ezra Newman
+
diff --git a/src/main/java/sc/fiji/hdf5/HDF5ImageJ.java b/src/main/java/sc/fiji/hdf5/HDF5ImageJ.java
index e497ce9..91b207d 100644
--- a/src/main/java/sc/fiji/hdf5/HDF5ImageJ.java
+++ b/src/main/java/sc/fiji/hdf5/HDF5ImageJ.java
@@ -39,6 +39,7 @@
import ncsa.hdf.hdf5lib.exceptions.HDF5Exception;
import java.awt.HeadlessException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class HDF5ImageJ
@@ -347,6 +348,25 @@ static ImagePlus loadDataSetsToHyperStack( String filename, String[] dsetNames,
for (int i = 0; i < data.length; ++i) {
if (data[i] > maxGray) maxGray = data[i];
}
+ } else if (typeText.equals( "int32")) {
+ int[] rawdata_asflat = reader.int32().readMDArray(dsetName).getAsFlatArray();
+ float[] rawdata_asfloat = new float[rawdata_asflat.length];
+ for (int i = 0; i < rawdata_asfloat.length; i++)
+ {
+ rawdata_asfloat[i] = (float) rawdata_asflat[i];
+ }
+ for( int lev = 0; lev < nLevels; ++lev) {
+ ImageProcessor ip = imp.getStack().getProcessor( imp.getStackIndex(
+ channel+1, lev+1, frame+1));
+
+ System.arraycopy(rawdata_asfloat, lev * sliceSize,
+ (float[]) ip.getPixels(), 0,
+ sliceSize);
+ }
+ for (int i = 0; i < rawdata_asfloat.length; ++i)
+ {
+ if (rawdata_asfloat[i] > maxGray) maxGray = rawdata_asfloat[i];
+ }
}
}
}
@@ -372,12 +392,16 @@ static ImagePlus loadDataSetsToHyperStack( String filename, String[] dsetNames,
catch (HDF5Exception err)
{
+
+ IJ.log(Arrays.toString(err.getStackTrace()));
+
IJ.error("Error while opening '" + filename
+ "', dataset '" + dsetName + "':\n"
+ err);
}
catch (Exception err)
{
+ IJ.log(Arrays.toString(err.getStackTrace()));
IJ.error("Error while opening '" + filename
+ "', dataset '" + dsetName + "':\n"
+ err);
@@ -601,6 +625,40 @@ else if (typeText.equals( "float32") || typeText.equals( "float64") ) {
if (rawdata[i] > maxGray) maxGray = rawdata[i];
}
}
+ else if (typeText.equals("int32")) {
+ int[] rawdata_ints = reader.int32().readMDArray(dsetName).getAsFlatArray();
+ float[] rawdata = new float[rawdata_ints.length];
+ for (int i = 0; i < rawdata_ints.length; i++)
+ {
+ rawdata[i]= (float)rawdata_ints[i];
+ }
+
+ for( int frame = 0; frame < nFrames; ++frame) {
+ for( int channel = 0; channel < nChannels; ++channel) {
+ for( int lev = 0; lev < nLevels; ++lev) {
+ ImageProcessor ip = imp.getStack().getProcessor( imp.getStackIndex(
+ channel+1, lev+1, frame+1));
+ for( int row = 0; row < nRows; ++row) {
+ float[] trgData = (float[])ip.getPixels();
+ int trgOffset = row * nCols;
+ int srcOffset =
+ frame * frameToFrameOffset
+ + channel * channelToChannelOffset
+ + lev * levelToLevelOffset
+ + row * rowToRowOffset;
+ for( int col = 0; col < nCols; ++col) {
+ trgData[trgOffset] = rawdata[srcOffset];
+ ++trgOffset;
+ srcOffset += colToColOffset;
+ }
+ }
+ }
+ }
+ }
+ for (int i = 0; i < rawdata.length; ++i) {
+ if (rawdata[i] > maxGray) maxGray = rawdata[i];
+ }
+ }
@@ -996,6 +1054,8 @@ static int assignHDF5TypeToImagePlusBitdepth( String type, boolean isRGB) {
nBits = 16;
} else if (type.equals("float32") || type.equals("float64")) {
nBits = 32;
+ } else if (type.equals("int32")) {
+ nBits = 32; // we will cast to 32 bit floats
} else {
IJ.error("Type '" + type + "' Not handled yet!");
}