From 056367b1359dcaf2e43d64181b2f3b59c37d5ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Haberth=C3=BCr?= Date: Mon, 2 Feb 2015 15:36:39 +0100 Subject: [PATCH] Adding Fiji plugin, source code and README --- ImageJ/DMP_Reader.class | Bin 0 -> 2975 bytes ImageJ/DMP_Reader.java | 109 ++++++++++++++++++++++++++++++ ImageJ/HandleExtraFileTypes.class | Bin 0 -> 10037 bytes ImageJ/README.md | 4 ++ 4 files changed, 113 insertions(+) create mode 100644 ImageJ/DMP_Reader.class create mode 100644 ImageJ/DMP_Reader.java create mode 100644 ImageJ/HandleExtraFileTypes.class create mode 100644 ImageJ/README.md diff --git a/ImageJ/DMP_Reader.class b/ImageJ/DMP_Reader.class new file mode 100644 index 0000000000000000000000000000000000000000..0a14dc0aa58ccddc32c31524eaee3f7a56a98a00 GIT binary patch literal 2975 zcma)8`F9&v75>H=X=Hig$V#0=NmHCOi!51Dy1A_#Olv!#DqckG+I1R8NA^e_N7ksL zQDO&ZOG|-5X;}(1B?-{bg+d{QNG^3LWj}{M3i$4f7h?Mdj*stsbKiY;{oZ~0*S|mf z7{Fcldj!2Wr{SpxnqV}e2l+6jh0h2vg%lzr#Rz6$37Hewd0CZYHLsx@!A_hD!xml< z@^l0as&dZNPz&RN2rr6op&55#QOG3?Uy9&%d|Aj>B#vj~z_VicIaz&G!}Ad;o)hhP zA?Jm>py6u~B=BMcU&l8@@=YNxh4C%n-`4PQ1R2@R;5!;#3FFlW?#6e8d{2yjKa3v; ze@!Gm)bJw>Ki2TNg5Y>|eCU*d*wCDD!N`=1axpXJI##*Zt6;}~U9P%D*_|*-HB&+J zjOCcquI(%;2p6o9IbzIHtP~W){qvTc88loYTdvexnlX)eno+HC!B(($i;MnRpd*rrC^tLn5D>$t`~sGF#ZldemVKJj(6~`j$b0D<2~dQL^tXuK1@e)_?3=d z<9!{!!Ebfkz><#N;rBXjO6si}2c+OS>SD$ZeZ3LuU=(YU8X7v5@qvy%h~E#f!oZ4- zvDo3kOvgu(y}p)!R9?p)@$q_e64{_-lTFY0x`%73Pvf0kKSMz@TewHlpazoiz`vkL_}``-((aS+y1C*waTtplJPj|c-LB?*=Fw!JkGf&F)UbBmoacYa!YD3xbXmJj#()g(`>}< z#K6GTwh1f9U+fu9t|&1QNiP+tq73nJluvDc2PQkN#CS$ z0zrhi`$;mjjOO94Xr_TkU$QH3Kz*u#mOAugm$%$eM{DvXTK@@kX$3o{mJyA$H4vjr z_gO1h1G_%JZAy=tY@oeIeFvZF3C8xU=?AG1C)w+%#h2phKQI_qZ(`pyoD{zQ8tz@e z?Nf1e83%fT@nE2VJ96$w0Rn=nl5wKk2|d&vdJ@P`L=E+Jn*XLc97Ljf*h2 zwj0{CyFaDXkxHp`bfseHI*zAqFj^lKeto*x{reHc1FX`6tV$27(95j*@CZRaOt?=F z;8T3Q&k}wnPNPgI6<#NnuCgX?vV!mOJwHPa0@K~B5np$%1iDu!Q^{wQ z)LYoKg3J{0cA|m1E+d$_v4Xp&V)rP^xOcd#f%`_3^xFt3H`39wg2(QWbnN~H9(V(5 zNJRii^RYz?t{fl<{0A_7+Vv*_+N(v BzPA7X literal 0 HcmV?d00001 diff --git a/ImageJ/DMP_Reader.java b/ImageJ/DMP_Reader.java new file mode 100644 index 0000000..cd419c3 --- /dev/null +++ b/ImageJ/DMP_Reader.java @@ -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 diff --git a/ImageJ/HandleExtraFileTypes.class b/ImageJ/HandleExtraFileTypes.class new file mode 100644 index 0000000000000000000000000000000000000000..2a5e7fa5d735b1689fe222f0d17bfe397ccff3b8 GIT binary patch literal 10037 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 YS|o3vOfTb^{n#)O7xR-b)A*GC1tG}-K>z>% literal 0 HcmV?d00001 diff --git a/ImageJ/README.md b/ImageJ/README.md new file mode 100644 index 0000000..a8ffee9 --- /dev/null +++ b/ImageJ/README.md @@ -0,0 +1,4 @@ +# Reading TOMCAT DMP files with ImageJ/Fiji + +Drop the file DMP_Reader.class (source code in DMP_Reader.java) into the plugins directory (or any subfolder therein). +Make sure you also drop the file HandleExtraFileTypes.class to the plugins directory (and only there!) to enable the reader in the 'open' dialog.