Dokumentation zur Semesterarbeit bei Dr. Klaus Simon, ETH Zürich (Department Informatik) und EMPA St. Gallen (Abteilung Medientechnik) Manual zur Halftoning Application Autor: Tobias Schlatter, September 2001 Betreuer: Beat Trachsler 1. Einleitung Ein Ziel meiner Semesterarbeit war es, ein eigenes Halftoning-Verfahren zu entwickeln, bei dem die Rasterpunkte unter Berücksichtigung der Nachbarschaft eines Pixels stochastisch verteilt werden. Das Problem dabei war, dass es keine Software gab, mit der man eigene Halftoning-Verfahren programmieren, implementieren und visualisieren konnte. Daher sollte im Vorfeld des eigenen Verfahrens eine Applikation entstehen, worin man eigene Halftoning-Verfahren möglichst einfach als Plug-Ins einbinden und visualisieren kann. So kann man direkt das Resultat grafisch beurteilen, ohne sich um die Darstellung der Bilder oder das Laden und Speichern der Bilder kümmern zu müssen. Entstanden ist nun ein Programm, das im Internet herunterladbar und frei benutzbar ist. Es ist bei folgender Adresse zu finden: http://www.educeth.ch/informatik/vortraege/grafikformate/halftoning/ Es werden mehrere Möglichkeiten angeboten, wie man das Programm starten kann: - Das Programm kann als Java-Applet direkt im Browser gestartet werden. Dazu müssen ein Java 2 Plug-In für Version 1.3 (oder höher) und ein Java Advanced Imaging (JAI) Package (Version 1.01 oder höher) installiert werden (siehe auch Abschnitt „Häufige Fragen“). Sind beide Tools installiert, so wird auf der Webseite eine Taste gezeigt, mit der man das Halftoning Applet starten kann. Das Halftoning Applet hat gegenüber der Halftoning Application den Nachteil, dass weder eigene Bilder noch eigene Raster-Algorithmen geladen, noch die gerasterten Bilder gespeichert werden können. - Um das Programm als Java-Applikation zu starten und später eigene Rasterverfahren zu programmieren, benötigt man ein Java 2 Software Development Kit (Java 2 SDK) Version 1.3 (oder höher). Dazu auch noch das Java Advanced Imaging (JAI) Package, Version 1.01 oder höher (siehe auch Abschnitt mit häufigen Fragen). Sind beide Tools richtig installiert, so kann die Halftoning Application mit einem Doppelklick auf „halftoneapplet.jar“ gestartet werden. Alternativ kann das Programm auch über java –jar halftoneapplet von einer MS-DOS-Eingabeaufforderung gestartet werden. Das hat den Vorteil, dass man Fehlermeldungen angezeigt bekommt, was sehr nützlich ist beim Programmieren eigener Raster-Algorithmen. - Das Programm kann auch mit Hilfe des Quellcodes kompiliert und gestartet werden. Diese Option sollte aber nur von Java-Profis benutzt werden. Dazu später mehr. Ist die Applikation oder das Applet erfolgreich gestartet, so hat man schon eine grosse Hürde überwunden. Falls Probleme bei der Installation der Packages und Plug-Ins auftreten, empfiehlt es sich, die Tipps im Abschnitt „Häufige Fragen“ durchzulesen. 2. Der Aufbau der Halftoning Application Originalbilder Gerasterte Bilder Graukeil Auswählbares Bild Optionen / Infos Obige Abbildung zeigt den Aufbau des Programms. Auf der rechten Seite befindet sich ein Bereich mit Informationen und einstellbaren Optionen, der sich je nach ausgewähltem Rasterungsverfahren unterschiedlich präsentiert. Bei Programmstart werden Bilder und RasterungsAlgorithmen gesucht und eingebunden (ausser wenn als Applet gestartet). Als Bilder kommen entweder Graustufenbilder oder Farbbilder (RGB) in Frage, und zwar in den Dateiformaten TIFF (*.tif) und JPEG (*.jpg). Folgende Rasterungsalgorithmen sind fest implementiert: - Threshold Rasterung - Random Threshold Rasterung - Bayer Dither - Dispersed Dot Ordered Dither - Error Diffusion Rasterung Mit dem Knopf „Berechne Rasterbild” wird sowohl der Graukeil als auch das auswählbare Bild mit den eingestellten Optionen (sofern vorhanden) gerastert und in der unteren Hälfte dargestellt. Jetzt können die Bilder gezoomt und bei Bedarf auch gespeichert werden (ausser wenn das Programm als Applet läuft). Wie ist die Halftoning-Application strukturiert? In der Einleitung wurde bereits erwähnt, dass die Applikation darauf konzipiert ist, dem Programmierer des Rasterungs-Algorithmus möglichst viel Arbeit abzunehmen. Er soll sich möglichst nur um sein Rasterungsverfahren kümmern müssen. In der Benutzeroberfläche wird ein Rasterungsverfahren ausgewählt und dessen Optionen eingestellt. Der Umgang mit verschiedenen Bildformaten, mit der Darstellung und dem Zoom der Bilder übernimmt ein übergeordnetes Programmpaket, das über eine Schnittstelle mit dem ausgewählten Halftoning-Verfahren kommuniziert. Untenstehendes Schema soll das Prinzip verdeutlichen: Grafische Benutzer-Schnittstelle (Halftoning Application) Halftoning-Schnittstelle Bild 1 Bild 2 ... Bild n Threshold Random Threshold Bayer Dither Floyd-Steinberg ... Weitere Algorithmen Die verschiedenen Algorithmen bilden kleine Module, die für sich kompiliert werden. Sie werden beim Start zusammen mit den zur Verfügung stehenden Bildern eingelesen. Einige Bilder und einige Algorithmen-Module sind im Programm bereits mitgeliefert. Weitere Bilder und Algorithmen können im aktuellen Verzeichnis bereitgelegt werden. Die Applikation nimmt diese dann automatisch mit ins Programm, sofern sie als gültige Module bzw. Bilder erkannt werden. Bekannte Fehler, Bedienungshinweise: In gewissen Fällen kommt es vor, dass die Originalbilder verschwinden oder die Bilder ständig neu gezeichnet werden. Das ist ein Problem von Java, das einfach vergisst die Bilder neu zu zeichnen. Verändern Sie in diesem Fall die Fenstergrösse des Programms oder laden Sie das Bild nochmals neu. Dann funktioniert alles wieder ganz normal. Das Programm kann nur mit RGB-Bildern und Graustufenbildern umgehen. Bilder in anderen Farbmodellen (CMYK, Lab, XYZ, etc.) führen zu fehlerhaften Resultate, teilweise sogar zu Programmabstürzen. Wandeln Sie ihr Bild in Photoshop (oder einem ähnlichen Programm) in ein RGB-Bild und lassen Sie es danach von der Halftoning Application rastern. Die Dimension des Bildes sollte 450*300 Pixel nicht überschreiten, da es sonst nicht vollständig im Fenster sichtbar ist. 3. Die Rasterungs-Algorithmen Die eingebauten Rasterungs-Algorithmen wiederspiegeln eine Auswahl von gängigen Rasterungsverfahren. Nachfolgend werden sie kurz erklärt. Tiefere Einblicke in die verschiedenen Verfahren bieten die Bücher von R. Ulichney [1], H. R. Kang [2] und D. L. Lau / G. R. Arce [5]. Alle Algorithmen sind für Graustufenbilder konzipiert. Bei Farbbildern behandeln sie jeden Farbkanal getrennt, ohne Einfluss auf die anderen Farbkanäle des gleichen Bildpunktes. Threshold Rasterung Das Threshold Verfahren weist jedem Grauwert eines Pixels entweder schwarz oder weiss zu. Dabei bedient es sich eines fixen Schwellenwertes. Ist die Graustufe kleiner als der Schwellenwert, so wird der Punkt schwarz gefärbt, ansonsten weiss. Random Threshold Rasterung Dieser Algorithmus verwendet den Grauwert eines Bildpunktes als Wahrscheinlichkeit, dass dieser Bildpunkt im gerasterten Bild weiss erscheint. Weisse Pixel ergeben also mit 100% Wahrscheinlichkeit einen weissen Punkt, ein 50%-Grau ergibt zu 50% einen weissen Rasterpunkt. Bayer Dither Das Bayer Dither Verfahren stammt von B. E. Bayer von 1973 [4]. Es beruht auf einer Threshold-Matrix, die für jeden Rasterpunkt den Grauwert verwaltet, ab dem dieser Punkt weiss dargestellt wird. Dispersed Dot Ordered Dither Das Dispersed Dot Ordered Dither Verfahren funktioniert genau gleich wie das Bayer Dither Verfahren. Unterschiedlich ist lediglich, wie man zu der Threshold-Matrix kommt. Die hier verwendeten Matrizen werden mittels einem Tesselations-Verfahren rekursiv hergestellt. Je nach Rekursionstiefe entstehen grössere Matrizen, d.h. es werden mehr Graustufen simuliert. Error Diffusion Rasterung Die Kategorie „Error Diffusion“ vereint mehrere Rasterverfahren, die sich alle des gleichen Prinzips bedienen. Ein Bildpunkt wird wie im Threshold Verfahren gemäss einem Schwellenwert schwarz oder weiss gerastert. Der Fehler, der dabei gemacht wird, wird auf die umliegenden, noch nicht gerasterten Punkte verteilt. Die Verteilung bestimmt eine Matrix, die unterschiedlich gross sein kann. Diese Matrix kann auch dynamisch verändert (perturbiert) werden, was eine bessere Rasterbild-Qualität ergibt (siehe „Blue Noise“ in [1]). 4. Eigene Rasterungs-Algorithmen programmieren Um ein eigenes Rasterungsverfahren zu implementieren, benötigt man die Dateien halftoneapplet.jar und vorlagen.zip, welche man von der Homepage herunterladen kann. Am besten erstellt man sich einen neuen Ordner, worin man die Zip-Datei entpackt und das Jar-File hineinlegt. In diesem Ordner sollten jetzt 5 Dateien sein (3 Java-Dateien, ein TIFF-Bild und das Jar-File). Natürlich benötigt man auch noch das in der Einleitung angesprochene Java 2 Software Development Kit (Java 2 SDK) Version 1.3 (oder höher). Programmiert wird der Algorithmus also in Java. Sie können einen gewöhnlichen Editor verwenden, um die Algorithmen zu programmieren. Ich empfehle den Freeware-Editor JCreator LE [6], da er angenehm zu bedienen und doch recht einfach zu handhaben ist. Es gibt 2 Möglichkeiten, wie man einen eigenen Raster-Algorithmus programmieren und testen kann: Entweder mit oder ohne Grafische Benutzeroberfläche (Graphical User Interface = GUI). Die Programmierung ohne GUI hat den Vorteil, dass man keine Bilder auswählen oder Tasten betätigen muss. Das Programm startet und macht danach alles selbständig. Das GUI hat dafür den Vorteil, dass man das Resultat gerade sieht. Zudem kann man nur per GUI allfällige Optionen testen. Am besten erstellt man sich eine Kopie von Halftone_Vorlage.java und gibt der Datei einen sinnvollen Namen (in der Form „Halftone_MeinAlgorithmusName.java“). Die Namenskonvention ist äussert wichtig, damit der Algorithmus vom GUI automatisch gefunden werden kann. Öffnen Sie die Datei mit dem Editor und ändern Sie in den Zeilen 28, 29, 35, 59 und 67 den Ausdruck „Halftone_Vorlage“ durch den von Ihnen gewählten Namen (z.B. „Halftone_MeinAlgorithmusName“). Die ersten drei Orte sind theoretisch nicht unbedingt nötig, aber es entspricht gutem Programmierstil. Ändern Sie jetzt in Zeile 81 den Namen des Algorithmus wie er im Programm erscheint. Programmierung ohne GUI (stand-alone) Um die Rasterverfahren-Klasse später kompilieren zu können, müssen Sie einige Dinge kontrollieren. Die Package-Anweisung (Zeile 43) muss auskommentiert und somit inaktiv sein. Sie wird nur gebraucht, wenn der Algorithmus ins Jar-File gepackt werden soll. In Zeile 48 muss die Import-Anweisung ebenfalls inaktiv gesetzt werden. Sie verhindert, dass das GUI importiert wird. Nach dem Speichern der Datei ist Ihre Klasse jetzt bereits lauffähig. Sie macht zwar das gleiche wie die Vorlage, doch sollte der von Ihnen gewählte Namen erscheinen. Testen Sie dies, indem sie die Klasse kompilieren und ausführen. Dazu öffnen Sie eine MS-DOS-Eingabeaufforderung, wechseln ins richtige Verzeichnis und tippen Zeile 28 ab (z.B. javac Halftone_MeinAlgorithmusName.java). Das erste Mal werden Sie eventuell eine Warnung bekommen (weil die neu erzeugte HalftoneSuperClass ein API benutzt, das als „deprecated“ vorgemerkt ist). Sie können Sich jetzt überzeugen, dass 2 neue „.class“-Da- teien erzeugt worden sind. Jetzt können Sie die Zeile 29 abtippen (z.B. java Halftone_MeinAlgorithmusName) und der Algorithmus wird gestartet. Wenn diese Schritte erfolgreich durchgeführt wurden, können Sie sich an Ihren Algorithmus machen. Dazu brauchen Sie die Methode halftone, die Sie abändern müssen. Sie erhalten in dieser Methode einen 3-dimensionalen int-Array (mit den Dimensionen Höhe, Breite und Anzahl Farbenebenen) als Input und müssen einen solchen Array wieder zurückgeben. Der Wert 255 entspricht weiss, 0 entspricht schwarz. Programmierung mit GUI Wie bei der stand-alone Version müssen Sie auch hier einige Dinge kontrollieren. Die Package-Anweisung (Zeile 43) muss auskommentiert und somit inaktiv sein. Sie wird nur gebraucht, wenn der Algorithmus ins JarFile gepackt werden soll. In Zeile 48 muss die Import-Anweisung aktiviert werden. Wenn dort Kommentarzeichen vor der Zeile stehen, dann löschen Sie sie. Wiederum nach dem Speichern sollte die Klasse nun lauffähig sein. Um sie zu kompilieren und zu starten benötigen Sie die Anweisungen auf Zeilen 35 und 36. Nach dem Kompilieren sollte die „.class“-Datei Ihres Algorithmus erstellt worden sein. Nach dem Starten öffnet sich ein neues Fenster mit der Programmoberfläche. Wenn dies alles geklappt hat, können Sie sich an das Programmieren Ihres Algorithmus wagen. Sie müssen die Methode halftone verändern. Bei der Programmierung mittels GUI haben Sie die Möglichkeit, Optionen und Infos zum Algorithmus anzubieten. Diese beiden Features sollten Sie aber erst implementieren, wenn Ihr Algorithmus in den Grundzügen läuft. Dort müssen Sie alle Ereignisse selber abfangen und handhaben. Sehen Sie sich dazu die erweiterte Vorlage („Halftone_ErweiterteVorlage.java“) an. 5. Der Source-Code der Halftoning-Application Um den Source-Code zu betrachten, müssen Sie die Datei halftoneproject.zip herunterladen. Den Source-Code werden Sie in den allermeisten Fällen aber gar nie brauchen. Nur wenn Sie das Programm erweitern möchten, oder die eingebauten Algorithmen anschauen möchten, ist das sinnvoll. Wenn Sie die heruntergeladene Datei entpacken, erstellt sich nebenstehende Verzeichnisstruktur. Das Verzeichnis applet dient dazu, ein verändertes Jar-File mit einem Browser zu testen. Im Verzeichnis applikation können Sie testen, ob ein verändertes Jar-File auch als startbares Paket funktioniert. Der Ordner project beinhaltet die eigentlichen Source-Code-Dateien. Da die Dateien als Package definiert sind, entstehen Ordnerhierarchien mit 3 Ebenen. Bei classes finden Sie eine Batch-Datei, die Ihnen aus den Klassendateien und aus den Bildern das Jar-File schnürt. Vergessen Sie nicht, dass Sie die Klassen erst einmal kompilieren müssen, bevor das klappt. Und vergessen Sie auch nicht, die Jar-Datei in die Ordner applet/classes und application zu kopieren, um sie zu testen. Mit dem JCreator können Sie direkt das ganze Projekt anschauen, wenn Sie die Datei HalftoneApplet.jcw doppelklicken. Sie können danach das ganze Projekt mit F7 kompilieren. Haben Sie JCreator nicht installiert, so starten Sie folgendes Kommando aus dem project-Verzeichnis in einer MS-DOS-Eingabeaufforderung: javac -d classes ch/empa/halftoneapplet/AppletStart.java Das garantiert Ihnen, dass die kompilierten Dateien am richtigen Ort landen. Beachten Sie, wenn Sie Änderungen in HalftoneSuperClass.java machen, dass Sie diese Änderungen auch in der gleichen Datei im applikation Verzeichnis machen. Dort müssen Sie aber die package-Anweisung mittels Kommentarzeichen deaktivieren. Häufige Fragen / Tipps Installationstipps - Java 2 Software Development Kit (Java 2 SDK): Das ist das eigentliche „Java“. Sie finden es unter http://java.sun.com/j2se/. Bei der Installation wird das Java Plug-In (JRE) mitinstalliert – ob man will oder nicht. Die Installation sollte aber keinerlei Probleme bereiten. Testen Sie nach dem Download, ob sich z.B. die Halftone-Vorlage oder die HalftoneSuperClass kompilieren lassen. Beides sollte nun möglich sein. - Java Plug-In für Browser: Wird auch Java 2 Runtime Environment (JRE) genannt. Da die gängigen Browser nur Java Applets bis Java 1 Version 1.1 darstellen können, braucht man ein zusätzliches Browser-Plug-In. Zu finden ist es unter http://java.sun.com/products/plugin/index.html. Laden Sie die internationale Version des JRE herunter. Nach der Installation müssen alle Browserfenster geschlossen und der Browser neu gestartet werden, damit das Applet korrekt läuft. - Java Advanced Imaging (JAI): Bei http://java.sun.com/products/java-media/jai/ kann man JAI herunterladen. Wählen Sie den „JDK Install“ Download. Die Installationsroutine kopiert eigentlich nur 3 Dateien in die Java-Installation. Es kann leider vereinzelt Fälle geben, wo das Installationsprogramm die 3 Dateien nicht in alle notwendigen Verzeichnisse kopiert. Das tritt vor allem bei Personen auf, die mehrere Java-Versionen gleichzeitig installiert haben. Dann müssen Sie die 3 Dateien jai_codec.jar, jai_core.jar, mlibwrapper_jai.jar selber ins Verzeichnis lib/ext (Unterordner ext im Ordner lib) in allen Versionen ihrer Java-Installationen kopieren. Danach sollten Applet bzw. Applikation laufen. Falsche Java-Version Wenn Sie bereits eine andere Version des Java 2 SDK oder des JRE installiert haben, kann es sein, dass im Browser die falsche Version geladen wird. Um das zu überprüfen, wählen Sie Start - Ausführen... und starten mit regedit den Registrierungs-Editor. Dort suchen Sie den Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft. Die beiden Unterschlüssel Java Development Kit (wenn Sie Java 2 SDK installiert haben) und Java Runtime Environment (für die JRE-Installation) haben je einen Eintrag CurrentVersion. Der Wert, der diesem Eintrag zugewiesen ist, sollte die neuste installierte Version sein, also z.B. „1.3“. Für jede installierte Version sollte es einen Unterschlüssel geben, der als Namen die Versionsnummer trägt. Stimmt der Wert von CurrentVersion nicht mit der neusten Version überein, dann müssen Sie die Zeichenfolge ändern. Mittels Doppelklick können die Einträge bearbeitet werden. Da die Werte aus der Registrierungs-Datenbank von Windows normalerweise nur beim Starten gelesen werden, müssen Sie den Computer danach neu starten. Rasterungs-Algorithmus kann nicht kompiliert werden Wenn Sie beim Programmieren Ihres Rasterungsverfahren Fehlermeldungen der nachfolgenden Art erhalten, dann wird es daran liegen, dass die import-Anweisung aktiv statt inaktiv ist oder umgekehrt. Wenn Sie für stand-alone kompilieren, muss die import-Anweisung (Zeile 48) inaktiv sein. Haben Sie die import-Anweisung aktiv, dann sieht die Fehlermeldung folgendermassen aus: Setzen Sie daher die import-Anweisung mit Kommentarzeichen ausser Kraft. Kompilieren Sie Ihr Rasterungs-Algorithmus für das GUI, dann darf die import-Anweisung von ch.empa.halftoneapplet.HalftoneSuperClass (Zeile 48) nicht deaktiviert sein. Ist die import-Anweisung inaktiv, so ergibt sich folgende Fehlermeldung: Entfernen Sie die Kommentarzeichen deshalb, damit der Import des GUI aktiviert wird. Literaturhinweise [1] Ulichney, Robert (1987): „Digital Halftoning“ Cambridge: MIT Press. [2] Kang, Henry R. (1999): „Digital Color Halftoning“ Bellingham, Washington: SPIE Optical Engineering Press. [3] Gooran, Sasan (2001): „High Quality Frequency Modulated Halftoning” Dissertation, Norrköping: Linköpings Universitet. [4] Bayer, B. E. (1973): „An Optimum Method For Two-Level Rendition Of ContinousTone Pictures“ In: International Conference on Communications, Vol. 1, S. „26-11“ „26-15“ [5] Lau, Daniel L und Arce, Gonzalo R. (2001): „Modern Digital Halftoning“ New York, Basel: Marcel Dekker, Inc. [6] Java-Entwicklungsumgebung „JCreator LE version 2.0“: http://www.jcreator.com JApplet ActionListener AppletStart FilenameFilter ShowOnlyPictureFiles +accept(dir:File,name:String):boolean +init():void +stop():void +actionPerformed(e:ActionEvent):void +main(s:String[]):void FilenameFilter ShowOnlyClassFiles +accept(dir:File,name:String):boolean FileFilter PictureFileFilter PictureListManager +PictureListManager(localFileList:String[],packageFileList:String[]) +PictureFileFilter() +PictureFileFilter(extension:String) vector:Vector +PictureFileFilter(extension:String,description:String) +PictureFileFilter(filters:String[]) +PictureFileFilter(filters:String[],description:String) PictureListElement +accept(f:File):boolean +getExtension(f:File):String +addExtension(extension:String):void +PictureListElement(elementPictureName:String,elementFileName:Object,elemen extensions:String[] description:String extensionListInDescription:boolean GrayScaleRamp pictureName:String fileName:Object fileType:int packageFile:boolean localFile:boolean JFrame +createGrayScaleRamp(width:int,height:int):int[] BuildGuiFrame Icon +BuildGuiFrame(halftoneClassListValue:Vector,pictureListLocal:String[],pictureListInPackage:String[],isAppletValue:boolean) IconJAI +IconJAI(im:RenderedImage) +paintIcon(c:Component,g:Graphics,x:int,y:int):void HalftoneSuperClass iconWidth:int iconHeight:int selectionRectangle:Rectangle +halftone(pixelmap:int[][][]):int[][][] +optionsPanel(numberOfBands:int):JPanel +infoPanel():JPanel +test(loadFileName:String,halftoneAlgorithm:HalftoneSuperClass,saveFileName:String,saveFileType:String):void name:String Halftone ErrorDiffusion Halftone Threshold Halftone RandomThreshold +main(argv:String[]):void +main(argv:String[]):void +main(argv:String[]):void +halftone(pixelmap:int[][][]):int[][][] +halftone(pixelmap:int[][][]):int[][][] +halftone(pixelmap:int[][][]):int[][][] +inBounds(x:int,y:int,x_max:int,y_max:int):boolean +optionsPanel(numberOfBands:int):JPanel +infoPanel():JPanel +dontOverflow(value:double):int +changeThresholdValueRed():void +perturbingMatrix(matrix:double[][],rand:Random):double[][] +changeThresholdValueGreen():void name:String +lookUpAlgorithm():double[][] +changeThresholdValueBlue():void +lookUpMatrix():int[][] +changeThresholdRGB(value:int):void +lookUpDenominator():int +infoPanel():JPanel +lookUpPerturbation():int[][][] +optionsPanel(numberOfBands:int):JPanel name:String +infoPanel():JPanel +formatNumbers(val:int,max:int):String +showMatrixInInfoPanel():void name:String Halftone Bayer ...DispersedDotOrderedDither +main(argv:String[]):void +main(argv:String[]):void +halftone(pixelmap:int[][][]):int[][][] +halftone(pixelmap:int[][][]):int[][][] +lookUpBayerMatrix(value:int,x:int,y:int):int +lookUpBayerMatrix(value:int,x:int,y:int):int +optionsPanel(numberOfBands:int):JPanel +optionsPanel(numberOfBands:int):JPanel +infoPanel():JPanel +infoPanel():JPanel +formatNumbers(val:int,max:int):String +formatNumbers(val:int,max:int):String +showMatrixInInfoPanel():void +showMatrixInInfoPanel():void name:String name:String