Adding Fiji plugin, source code and README
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import ij.plugin.*;
|
||||
import java.awt.*;
|
||||
import java.io.*;
|
||||
import ij.*;
|
||||
import ij.io.*;
|
||||
import ij.process.*;
|
||||
import ij.measure.*;
|
||||
|
||||
/** Opens and displays DMP images. */
|
||||
/** Adapted from a plugin called PDS_Reader.java from Mike Martin. */
|
||||
/** 21-SEP-2010 bernd.pinzer@psi.ch */
|
||||
public class DMP_Reader extends ImagePlus implements PlugIn {
|
||||
|
||||
private static final String TITLE = "DMP Reader";
|
||||
private String directory, fileName;
|
||||
private DataInputStream f;
|
||||
private StringBuffer info = new StringBuffer(512);
|
||||
private double bscale, bzero;
|
||||
String keyword, value, line = "", sampleType, encodingType="",mapScale="";
|
||||
private int recordBytes,bitsPerPixel;
|
||||
|
||||
public void run(String arg) {
|
||||
String path = getPath(arg);
|
||||
int islash = path.lastIndexOf('/');
|
||||
directory = path.substring(0, islash+1);
|
||||
fileName = path.substring(islash+1);
|
||||
if (fileName==null)
|
||||
return;
|
||||
IJ.showStatus("Opening: " + directory + fileName);
|
||||
FileInfo fi = null;
|
||||
try {
|
||||
fi = getInfo();
|
||||
} catch (IOException e) {
|
||||
IJ.showMessage(TITLE, ""+e);
|
||||
return;
|
||||
}
|
||||
if (fi!=null && fi.width>0 && fi.height>0) {
|
||||
FileOpener fo = new FileOpener(fi);
|
||||
ImagePlus imp = fo.open(false);
|
||||
ImageProcessor ip = imp.getProcessor();
|
||||
setProcessor(fileName, ip);
|
||||
if (arg.equals("")) show();
|
||||
} //else
|
||||
//IJ.error("This does not appear to be a PDS file.");
|
||||
IJ.showStatus("");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
FileInfo getInfo() throws IOException {
|
||||
FileInfo fi = new FileInfo();
|
||||
fi.fileName = fileName;
|
||||
fi.directory = directory;
|
||||
fi.width = 0;
|
||||
fi.height = 0;
|
||||
fi.offset = 6;
|
||||
|
||||
//BufferedReader f = new BufferedReader(new FileReader(directory+fileName));
|
||||
InputStream is = new FileInputStream(directory+fileName);
|
||||
byte[] buf = new byte[6]; // we're about to read the first 6 bytes
|
||||
is.read(buf, 0, 6);
|
||||
//one reason I hate java: there's no such thing as a uint16 data
|
||||
//type. To work around this, we have to do some gymnastics:
|
||||
int firstByte = 0;
|
||||
int secondByte = 0;
|
||||
firstByte = (0x000000FF & ((int)buf[0]));
|
||||
secondByte = (0x000000FF & ((int)buf[1]));
|
||||
fi.width = (secondByte << 8 | firstByte);
|
||||
// because I never could remember that even a single day, here
|
||||
// are some explanations:
|
||||
// first we are promoting a signed byte to an int, which
|
||||
// results in bits 8 through 31 set to 1 if the number happens
|
||||
// to be larger than 127. the bitwise and with 0x000000FF wipes
|
||||
// out all but the first 8 bits.
|
||||
// The last line deals with endianness: the binary file is
|
||||
// little endian, while java is in general big endian.
|
||||
//System.out.println(fi.width);
|
||||
|
||||
firstByte = (0x000000FF & ((int)buf[2]));
|
||||
secondByte = (0x000000FF & ((int)buf[3]));
|
||||
fi.height = (secondByte << 8 | firstByte);
|
||||
//System.out.println(fi.height);
|
||||
|
||||
fi.fileType = FileInfo.GRAY32_FLOAT;
|
||||
fi.intelByteOrder = true;
|
||||
|
||||
fi.valueUnit = "gray value";
|
||||
return fi;
|
||||
} // setting the FileInfo
|
||||
|
||||
|
||||
|
||||
private String getPath(String arg) {
|
||||
if (null != arg) {
|
||||
if (new File(arg).exists()) return arg;
|
||||
}
|
||||
// else, ask:
|
||||
OpenDialog od = new OpenDialog("Choose a .DMP file", null);
|
||||
String dir = od.getDirectory();
|
||||
if (null == dir) return null; // dialog was canceled
|
||||
dir = dir.replace('\\', '/'); // Windows safe
|
||||
if (!dir.endsWith("/")) dir += "/";
|
||||
return dir + od.getFileName();
|
||||
}
|
||||
|
||||
} // end of DMP reader class
|
||||
Reference in New Issue
Block a user