Dienstag, Januar 24, 2006

Donnerstag, Januar 12, 2006

Der Gesellschaft für Informatik beigetreten

Zu Jahresbeginn bin ich der Gesellschaft für Informatik e.V. beigetreten, für Studenten gibts die Mitgliedschaft bereits ab 17,50€ im Jahr.

Und vor wenigen Tagen habe ich meinen Zugang zum GI Portal bekommen. Mir ist vorher bereits bekannt gewesen, dass die Zeitschrift Informatik Spektrum zur Mitgliedschaft gehört. Aber es beinhaltet ebenfalls einen Onlinezugang zum Springer Wissenschaftsverlag. Dort gibt es noch sehr sehr viel mehr Fachzeitschriften die teilweise sehr interessant sind.

So kann ich bereits jetzt sagen, dass es eine sehr gute Investition für dieses Jahr war!
Danke GI

Der Gesellschaft für Informatik beigetreten vollständig lesen...

Mittwoch, Januar 11, 2006

Java-Programming: ImageIcon mit Grafikprimitiven überzeichnen (Animation)

Ein kleines How-To zur Java-Programmierung wie Swingkomponenten mit Grafikprimitiven überzeichnet werden können. Der Grund weshalb ich mich mal wieder Java beschäftigt habe ist, dass ich für das Multimedialabor eine Anwendung erstellen musste, die die Blickpositionen die mit einem Eye-Tracker aufgenommen wurden abspielen und die Messdaten in einer Datenbank speichern kann. Das Stimuli (bzw. der untersuchte Bildschirminhalt) liegt dabei als JPG Datei vor, eine Navigation war nicht möglich, es konnten lediglich Regionen definiert werden die von besonderer Bedeutung sind. Wie Datenbanken in Java angesprochen werden findet man an jeder Ecke, aber für das Zeichenproblem ich hatte kein existierendes Beispiel gefunden...

So nun aber zum eigentlichen Problem:
Das Ziel ist es , eine JPG Datei in einem Swing-Dialog darzustellen und über das Bild die aufgenommen Augenbewegungen mit (roten) Rechtecken und verbindenden (blauen) Linien zu zeichnen. Aufgrund nur wenig Übung mit Swing, habe ich zur Darstellung des JPG die Klasse ImageIcon verwendet, somit ist die Darstellung des Bildes schon einmal erledigt.

Eine weitere Frage besteht jetzt nur noch darin, wie der Rest über das Bild gezeichnet werden kann? Und da das Zeichnen dynamisch sein sollte waren noch folgende Eigenschaften zu erfüllen:

  1. Beliebige Zeichengeschwindigkeit
  2. Start/Pause/Stop Funktionalität
  3. Parallele Ausführung

Für das Zeichnen der Grafikprimitive über das JPG-Bild muss eine eigene Klasse, hier ImagePlayer genannt, von der ImageIcon Klasse abgeleitet werden. Um die parallelität zu erreichen musste die Klasse auch noch die Schnittstelle Runnable implementieren.
Dadurch kann das eigentliche Abspielen in einen eigenen Thread verlagert werden und die Anwendung blockiert nicht die restliche Verarbeitung.

Die Signatur der Klasse sieht also so aus:
public class ImagePlayer extends ImageIcon implements Runnable {...
Nun wird noch der Default Konstruktur und ein Konstruktor dem ein JPG Bild als byte-Array übergeben wird erstellt. Für die Messwerte des Eyetrackers wird ebenfalls noch eine setter-Methode hinzugefügt. Die Messwerte sind als relative x,y Positionen vorhanden.

Im nächsten Schritt muss nun die Methode paintIcon(Component c, Graphics g, int x, int y)
überschrieben werden. Diese Methode ist dafür zuständig die eigentliche Komponente (sich selbst) zu zeichnen. Um die Grundfunktionalität zu erhalten darf nun nicht vergessen werden die Elternkomponente mit super.paintIcon(...) aufzurufen, sonst wird einfach nichts gezeichnet.
Um nun das Zeitgesteuerte einzeichnen der Rechtecke und Linien zu ermöglichen, dürfen aber nicht alle Daten sofort an die Zeichenmethode übergeben werden. Ausserdem muss bedacht werden, dass die paintIcon-Methode ebenfalls durch einen Repaint automatisch ausgelöst werden kann.
Gelöst wird es so, dass die run-Methode des Threads, zwei LinkedList's mit den x,y Koordinaten stetig auffüllt und einen repaint auslöst. Dies erfolgt in der von Eyetracker ermittelten Geschwindigkeit, die in ms angegeben ist oder in 10ms Schritten, dies wird so lange durchgeführt bis alle Koordinaten gezeichnet sind.
Auf diese Art und Weise werden die Koordinaten mit ihrer Zeitlinie abgespielt und immer richtig eingezeichnet, auch nach einen repaint durch eine Größenveränderung des Fensters.

Der Anwender kann durch entsprechende Steuerkommandos die Verarbeitung in der run-Methode den Ablauf der Koordinateneinspielung Steuern (Start/Stop/Pause/Geschwindigkeit).

Für das Verständnis noch ein kleines Sequenzdiagramm:

Java-Programming: ImageIcon mit Grafikprimitiven überzeichnen (Animation) vollständig lesen...

Neues Jahr neues Glück

Das neue Jahr hat bereits begonnen und die Klausuren stehen auch schon wieder an. Der Aufwand sollte sich aber in Grenzen halten... hoffentlich.

Lediglich mein Spanischkurs macht mir noch etwas Sorgen, ich schaff es einfach nicht die Vokabeln und Grammatik zu lernen... Hab zum Glück noch 2 Wochen bis zur Klausur.

Naja wird schon schief gehen, die Klausurzeit. Am 15. Februar ist's dann für dieses Semester um.

Neues Jahr neues Glück vollständig lesen...