Autor Thema: ImageJ - Anpassung von Menüs  (Gelesen 4405 mal)

Stefan_O

  • Member
  • Beiträge: 665
ImageJ - Anpassung von Menüs
« am: Juli 14, 2011, 13:27:08 Nachmittag »
Hallo Zusammen,

ImageJ ist ein sehr gutes Programm, erweiterbar und kostenlos. Zudem läuft es auf allen gängigen Plattformen. Für alle, die es nicht komplett nutzen wollen oder können (wer kann das schon), bietet sich an, die Menüs gründlich zu entrümpeln, damit sie einfacher und übersichtlicher werden. Menü-Einträge entstehen in Image J auf zwei Arten:

1) automatisch durch die Plug-ins im /plugins-Verzeichnis
Werden hier Plug-ins gelöscht, verschwindet auch der Eintrag dafür. (Im unteren Teil des Plugins-Hauptmenü)

2) durch Definition in zwei Dateien
Diese lassen sich wie folgt anpassen:

Die Datei Ij.jar mit einem Dekomprimierungsprogramm öffnen (nicht entpacken!)

Die Definition der Menü-Einträge ist über zwei Dateien verteilt:

a) IJ_Props.txt
b) /ij/menus.class


IJ_Props.txt enthält die Einträge für die Add-ons und Plug-ins, die nicht zum Kern von ImageJ gehören. Als Beispiel sei der Plug-in für die Auswertung von Elektrophorese-Gelen genannt. Die Datei lässt sich extrahieren, mit einem Text-Editor bearbeiten und editiert wieder zurück ins Archiv Ij.jar geben. Das Archiv mit dem Dekomprimierungsprogramm neu speichern und ImageJ neu starten.

Einträge lassen sich sowohl komplett löschen, als auch durch vorsetzen von # deaktivieren:

Original:

# Plugins installed in the File/New submenu
new01="Image...[n]",ij.plugin.Commands("new")
new02="Hyperstack...",ij.plugin.HyperStackConverter("new")
new03="Text Window[N]",ij.plugin.NewPlugin("text")
new04="Internal Clipboard",ij.plugin.Clipboard("show")
new05="System Clipboard[V]",ij.plugin.Clipboard("showsys")


Wer nicht mit Hyperstacks arbeitet, kann es deaktivieren:

# Plugins installed in the File/New submenu
new01="Image...[n]",ij.plugin.Commands("new")
# new02="Hyperstack...",ij.plugin.HyperStackConverter("new")
new03="Text Window[N]",ij.plugin.NewPlugin("text")
new04="Internal Clipboard",ij.plugin.Clipboard("show")
new05="System Clipboard[V]",ij.plugin.Clipboard("showsys")


(siehe Korrektur im nächsten Beitrag)

Der Menü-Eintrag Hyperstacks taucht nun nicht mehr auf. Durch Entfernen des # lässt sich das Ganze rückgängig machen. Weitere sinnvolle Beispiele sind die Änderungen des LUT-Menüs und das Löschen der Elektrophorese-Gel-Auswertung. Die LUT-Einträge stammen sowohl aus der IJ_Props.txt (oberhalb der Trennlinie), als auch aus den Dateien im Verzeichnis /luts. Im Ernst, wer braucht da schon 28 Einträge?

Über IJ_Props.txt lassen sich schon fast alle wesentlichen Änderungen machen. Wer noch weiter gehen möchte, muss in die Trickkiste greifen.


/ij/menus.class ist eine .class-Datei, die nicht einfach geändert werden kann. Man muss quasi von vorne anfangen:

-   Source Code als „menus.txt“ speichern und anpassen
-   „menus.txt“ in „menus.java“ umbenennen
-   Die .java-Datei mit ImageJ -> Plugins -> Compile and run... in eine .class Datei umwandeln. Das ergibt eine Fehlermeldung, macht aber nichts, da die .class-Datei dennoch erstellt wird
-   Die alte menus.class durch die neue im Ij.jar ersetzen und die Archiv-Datei updaten

Der Source-Code ist unter http://rsb.info.nih.gov/ij/developer/source/ij/Menus.java.html verfügbar.

Hier lässt sich alles machen, alle Menüs ändern, löschen, unbenennen; es können auch eigene Menü-Einträge kreiert werden. Ein sinnvolles Beispiel ist das Löschen des Eintrags:

addPlugInItem(process, "Image Calculator...", "ij.plugin.ImageCalculator", 0, false);

Es gibt als Plug-in einen verbesserten Calculator_Plus, der um Länge besser ist. Wer die Datei Calculator_Plus.class ins gleiche Verzeichnis wie IJ_Props.txt im Archiv ij.jar legt, kann den Eintrag wie folgt ändern:

addPlugInItem(process, "Image Calculator...", "Calculator_Plus", 0, false);


Mit den beschriebenen Variationen lässt sich ImageJ einfach und übersichtlich gestalten und von Ballast befreien. Vorsicht aber bei Updates: die beiden editierten Dateien sollten zusätzlich noch separat gespeichert werden. Bei einem Update müssen die beiden Dateien innerhalb der ij.jar wieder ersetzt werden.

Gruss,
Stefan
« Letzte Änderung: September 26, 2011, 21:26:08 Nachmittag von Stefan_O »

Stefan_O

  • Member
  • Beiträge: 665
Re: ImageJ - Anpassung von Menüs
« Antwort #1 am: Juli 19, 2011, 16:14:44 Nachmittag »
Kleine Korrektur: Wenn in der IJ_Props.txt Zeilen deaktiviert werden, muss die Nummerierung angepasst werden, ansonsten tauchen die folgenden Einträge nicht im Menü auf.

Falsch:

# Plugins installed in the File/New submenu
new01="Image...[n]",ij.plugin.Commands("new")
# new02="Hyperstack...",ij.plugin.HyperStackConverter("new")
new03="Text Window[N]",ij.plugin.NewPlugin("text")
new04="Internal Clipboard",ij.plugin.Clipboard("show")
new05="System Clipboard[V]",ij.plugin.Clipboard("showsys")

Korrekt:

# Plugins installed in the File/New submenu
new01="Image...[n]",ij.plugin.Commands("new")
# new02="Hyperstack...",ij.plugin.HyperStackConverter("new")
new02="Text Window[N]",ij.plugin.NewPlugin("text")
new03="Internal Clipboard",ij.plugin.Clipboard("show")
new04="System Clipboard[V]",ij.plugin.Clipboard("showsys")

Gruss,
Stefan

Stefan_O

  • Member
  • Beiträge: 665
Re: ImageJ - Anpassung von Menüs
« Antwort #2 am: August 27, 2011, 16:49:53 Nachmittag »
Wer CLAHE im "Process" Menu habe möchte, kann folgendes machen:

Die Datei CLAHE_.class in der Ij.jar in den selben Ordner wie IJ_Props.txt legen und wie oben beschrieben folgende Zeile in menu.class einfügen:

Menu process = getMenu("Process");
        addPlugInItem(process, "Smooth", "ij.plugin.filter.Filters(\"smooth\")", KeyEvent.VK_S, true);
        addPlugInItem(process, "Sharpen", "ij.plugin.filter.Filters(\"sharpen\")", 0, false);
        addPlugInItem(process, "Find Edges", "ij.plugin.filter.Filters(\"edge\")", 0, false);
        addPlugInItem(process, "Find Maxima...", "ij.plugin.filter.MaximumFinder", 0, false);
        addPlugInItem(process, "Enhance Contrast", "ij.plugin.ContrastEnhancer", 0, false);
        addPlugInItem(process, "Contrast Limited Adaptive Histogram Equalization...", "CLAHE_", 0, false);

Gruss,
Stefan