ImageJ:如何将 txt 文件转换为插件

ImageJ: How convert txt file into a plugin

这个问题很容易有人回答,但我似乎无法解决。我下载了 Microscope_Scale 插件 (https://imagej.nih.gov/ij/plugins/microscope-scale.html) 的源代码 (.java)。我通过添加几个显微镜物镜的校准来编辑文件。我似乎无法弄清楚如何将 .txt 文件编译(?)为 ImageJ(也尝试过 FIJI)可以 运行 的插件。这么基础的概念,我真的不明白为什么它不起作用。

问题是如何将以前编辑的 .java 文件(现在是 .txt 文件)转换为插件?

未经编辑的 .class 文件运行良好。

非常感谢,非常感谢您的帮助!

-jh

下面是编辑插件的代码:

import ij.plugin.filter.PlugInFilter;
import ij.process.*;
import ij.gui.*;
import ij.measure.Calibration;
import java.awt.*;
import ij.plugin.*;

public class Microscope_Scale implements  PlugInFilter {

/* DESCRIPTION & CUSTOMIZATION INSTRUCTIONS
        This plugin lets you calibrate images spatially using hard-coded arrays of magnifications,
        calibration values and length units. The calibration can optionally be set as global. After
        spatial calibration the plugin will also optionally run Wayne's new scale-bar plugin, available
        in version 1.28h. To customize the plugin for your specific microscope, edit the arrays
        between the "START EDIT" and "END EDIT" comments below. Save anywhere in the
        "plugins" directory, then use "Compile and Run" option under the "plugins" menu to create
        a java class. Restart ImageJ.
**/
        ImagePlus imp;
        private static boolean addScaleBar = false;  //  if true run scalebar plugin - available in version 1.28h
        private static boolean isGlobalCal = false; // if true, set selected calibration as the global calibration
        private static int magIndex = 4; // index of initial selected magnification in dropdown menu

/* START EDIT
        Edit the following arrays using your microscope's nominal magnification steps, the
        corresponding spatial calibration and the length units of the spatial calibration.
        Make sure the arrays are of equal length.
**/
        // nominal magnification settings of the microscope
        private static String[] mags =  { "PLM_10", "PLM_25", "PLM_50", "PLM_100", "Stereo_8", "Stereo_10", "Stereo_12.5", "Stereo_16", "Stereo_20", "Stereo_25", "Stereo_30", "Stereo_35", "Comp_10", "Comp_20", "Comp_40", "Fluoro_10", "Fluoro_20", "Fluoro_40", "Fluoro_100"};
        // spatial calibration for the nominal magnification settings - width of one pixel (pixelWidth)
        private static double[] xscales = {0.193, 0.077, 0.040, 0.020, 0.0066, 0.0053, 0.0043, 0.0034, 0.0027, 0.0022, 0.0018, 0.0015, 0.36337, 0.179533, 0.09107, 0.36630, 0.18450, 0.09208, 0.036144};
        // units for the spacial calibrations given in xscales array above
        private static String[] units =  { "um",  "um",  "um",  "um",  "mm", "mm",  "mm",  "mm",  "mm",  "mm",  "mm",  "mm", "um", "um", "um", "um", "um", "um", "um"};
/* END EDIT **/

        public int setup(String arg, ImagePlus imp) {
                this.imp = imp;
                if (imp==null)
                        {IJ.noImage(); return DONE;}
                return DOES_ALL;
        }

        public void run(ImageProcessor ip) {
                if (doDialog()) {
                        Calibration oc = imp.getCalibration().copy();
                        oc.setUnit(units[magIndex]);
                        oc.pixelWidth=xscales[magIndex];
                        oc.pixelHeight=oc.pixelWidth;
                        if (isGlobalCal) {
                                imp.setGlobalCalibration(oc);
                                int[] list = WindowManager.getIDList();
                                if (list==null) return;
                                for (int i=0; i<list.length; i++) {
                                        ImagePlus imp2 = WindowManager.getImage(list[i]);
                                        if (imp2!=null) imp2.getWindow().repaint();
                                }
                                } else {
                                imp.setGlobalCalibration(null);
                                imp.setCalibration(oc);
                                imp.getWindow().repaint();
                        }
                        if (addScaleBar){
                                IJ.run("Scale Bar...");
                        }
                }
        }

        private boolean doDialog() {
                GenericDialog gd = new GenericDialog("Scale Microscope Image...");
                gd.addChoice("Nominal Magnification", mags, mags[magIndex]);
                gd.addCheckbox("Global Calibration", isGlobalCal);
                gd.addCheckbox("Add Scale Bar", addScaleBar);
                gd.showDialog();
                if (gd.wasCanceled()) {return false;}
                magIndex=gd.getNextChoiceIndex();
                isGlobalCal = gd.getNextBoolean();
                addScaleBar = gd.getNextBoolean();
                return true;
        }
}

我能够通过使用不同的插件包解决我的问题:Microscope Measurement Tools (https://imagej.net/plugins/microscope-measurement-tools)。非常容易定制 objective 特定的校准。请注意,此插件适用于斐济。