DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

25
DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999

Transcript of DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

Page 1: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

IMAGES (Bilder)

Vortrag : Ronny Kuhnert am 9. November 1999

Page 2: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Die abstrakte Klasse Toolkit definiert die Schnittstelle für Implementierungen des AWT.

Methoden der Klasse Toolkit public abstract Image createImage(String filename)

– Liefert ein Bild, das aus der durch filename bezeichneten Datei geladen wird. Das geladene Bild wird nicht in einem Cache gehalten. Die Daten werden bei jedem Aufruf erneut gelesen.

public abstract Image createImage(URL url) – Bei dieser Variante wird das Bild von der übergebenen URL

geladen. public abstract Image createImage(ImageProducer producer)

– Erzeugt ein Offscreen-Image, dessen Pixel-Daten von producer bezogen werden.

Abstrakte Klasse Toolkit

Page 3: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public abstract Image getImage(String filename) – Liefert ein Bild, das aus der durch filename bezeichneten Datei

geladen wird. Hierbei wird das erzeugte Bild in einem Cache gehalten, um künftige Anfragen für dasselbe Bild schneller bedienen zu können. Wenn ein Bild nur einmal benötigt wird, sind die createImage()-Methoden vorzuziehen, die kein Caching betreiben.

public abstract Image getImage(URL url) – Bei dieser Variante wird das Bild von der übergebenen URL

geladen. public static synchronized Toolkit getDefaultToolkit()

– Liefert das standardmäßige grafische Toolkit, mit dem die Komponenten dargestellt werden. Der Standardwert ist durch die Property awt.toolkit festgelegt.

Page 4: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Abstrakte Klasse Graphics

Methoden der Klasse Graphics public abstract boolean drawImage(Image img, int x, int y,

ImageObserver observer) – Gibt das Bild img an der durch x und y bezeichneten Position aus.

observer ist das zu img gehörige Überwachungsobjekt. Für observer wird meist die Komponente übergeben, in der das Bild ausgegeben wird. Der Rückgabewert ist true, wenn das Bild zum Aufrufzeitpunkt bereits vollständig aufbereitet war, sonst false.

public abstract boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) – Diese Variante erlaubt zusätzlich eine Skalierung des Bildes

Page 5: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

import java.awt.*; class Bild1 extends Frame { Image bild= Toolkit.getDefaultToolkit().getImage("BILD.jpg"); public static void main(String[] args) { Bild1 b=new Bild1("Bild"); } Bild1(String title) { super(title); setBounds(50,50,300,300); setVisible(true); } public void paint(Graphics g) { g.drawImage(bild, 10, 10,300,200,this); } }

Page 6: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Klasse MediaTracker

Die Klasse MediaTracker dient dazu, den Verarbeitungsstatus von Medien zu überwachen. Als Medien gelten prinzipiell sowohl Bilder als auch Audiosequenzen. Implementiert sind allerdings nur die erforderlichen Methoden für Bilder. Hierbei können mehrere Medien einer bestimmten ID-Nummer zugeordnet werden. Über diese ID kann dann der Status der gesamten Mediensequenz abgefragt werden.

Konstruktor der Klasse MediaTracker public MediaTracker(Component comp)

– Erzeugt ein neues Exemplar von MediaTracker, das die Bildsequenzen auf der Komponente comp ausgibt

Page 7: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Methoden der Klasse MediaTracker public void addImage(Image image, int id)

– Fügt das Bild image zu der Liste der unter der Nummer id überwachten Bilder hinzu.

public void waitForAll() – Startet den Ladevorgang für alle registrierten Medien und blockiert,

bis er beendet ist. Nach der Rückkehr dieser Methode kann mit isErrorAny() festgestellt werden, ob bei einem Medium ein Fehler aufgetreten ist.

Exception: InterruptedException Falls während der Wartezeit eine Unterbrechung durch

einen anderen Thread eintritt. public void waitForID(int id)

– Startet den Ladevorgang für alle unter der Nummer id registrierten Medien und blockiert, bis er beendet ist. Nach der Rückkehr dieser Methode kann mit isErrorID() festgestellt werden, ob bei einem Medium ein Fehler aufgetreten ist.

Page 8: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public synchronized boolean isErrorID(int id) – Liefert true, wenn mindestens eines der unter der Nummer id

registrierten Medien beim Aufbereiten einen Fehler verursacht hat, oder false, wenn alle Medien erfolgreich aufbereitet werden konnten.

public synchronized void removeImage(Image image) – Entfernt das Bild image aus der Liste der überwachten Objekte.

Falls das Bild unter mehreren IDs registriert ist, wird es überall entfernt.

public synchronized void removeImage(Image image, int id) – Entfernt das Bild image aus der Liste der überwachten Objekte für

die ID id. Falls das Bild unter mehreren IDs registriert ist, bleiben die weiteren Registrierungen unberührt.

Page 9: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public void mediaTracker() { MediaTracker tracker = new MediaTracker(this); tracker.addImage(bild,1); try { tracker.waitForID(1); } catch (InterruptedException e) { System.err.println("Error: "+e); } } }

Page 10: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Klasse PixelGrabber

Mit der Klasse PixelGrabber ist es möglich, einen Ausschnitt eines Bildes zu kopieren. Das Bild muß hierbei in Form eines Image-Objekts vorliegen. Der Ausschnitt wird über seine Breite und Höhe sowie seine linke obere Ecke festgelegt. Über die Parameter offset und scansize der Konstruktoren ist es möglich, durch aufeinanderfolgende Aufrufe von grabPixels() ein Bild aus mehreren Teilbildern zusammenzusetzen oder zu überlagern. offset legt den Startindex fest, ab dem die Pixel im Puffer-Array gespeichert werden, und scansize ist die Pixel-Anzahl, um die die einzelnen Zeilen versetzt im Puffer gespeichert werden. Normalerweise wird scansize auf die Breite des gewünschten Ausschnitts gesetzt. Wenn scansize dagegen größer als die Breite ist, bleiben die überzähligen Spalten im Puffer unverändert.

Page 11: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Konstruktoren public PixelGrabber(Image img, int x, int y, int w, int h, boolean

forceRGB) – Erzeugt ein neues PixelGrabber-Objekt, mit dem ein Ausschnitt der

Breite w, der Höhe h und der durch x und y festgelegten oberen linken Ecke ausgeschnitten werden kann. Die Bilddaten werden hierbei aus dem Image-Objekt img bezogen. Wenn forceRGB true ist, wird das voreingestellte RGB-Farbmodell zugrunde gelegt. Andernfalls wird das Farbmodell des Bildes übernommen.

Methoden public boolean grabPixels()

– Versucht, die Pixel zu kopieren, und liefert true, wenn der Versuch erfolgreich war, oder false, wenn ein Fehler aufgetreten oder wenn eine Unterbrechung durch einen anderen Thread eingetreten ist. Diese Methode blockiert so lange, bis entweder der Kopiervorgang beendet oder ein Fehler aufgetreten ist.

– Exception: InterruptedException Falls während des Kopiervorgangs eine Unterbrechung durch einen

anderen Thread eingetreten ist.

Page 12: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public synchronized boolean grabPixels(long ms) – Zusätzlich zur vorhergehenden Variante kann ein Timeout

angegeben werden, in dem der Kopiervorgang abgeschlossen sein muß. Falls der Timeout vorher abläuft, wird auch false zurückgegeben.

– Exception: InterruptedException Falls während des Kopiervorgangs eine Unterbrechung durch

einen anderen Thread eingetreten ist. public synchronized void imageComplete(int status)

– Wird aufgerufen, um den Aufbereitungsstatus des Bildes zu melden.

Page 13: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Klasse MemoryImageSource MemoryImageSource ist ein ImageProducer, der seine

Bilddaten aus einem int- oder byte-Array bezieht, das dem Konstruktor übergeben wird. Mit der Methode createImage(), die Component und alle ihre Unterklassen besitzen, können die Bilddaten dann in ein Exemplar von Image gewandelt werden.

Seit Version 1.1 werden auch animierte Bilder unterstützt. Konstruktor der Klasse MemoryImageSorce public MemoryImageSource(int w, int h, int[] pix, int off, int

scan) – Erzeugt ein neues Exemplar von MemoryImageSource, das aus

dem int-Array pix ein Bild der Breite w Pixel und der Höhe h Pixel erzeugt. Die Pixel-Daten werden ab dem Index off ausgelesen, wobei angenommen wird, daß jede Pixel-Zeile in pix um scan Indexpositionen versetzt ist. Per Voreinstellung wird ein RGB-Farbmodell verwendet.

Page 14: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Abstrakte Klasse Image

Die abstrakte Klasse Image stellt eine allgemeine Schnittstelle für Bilddaten dar. Sie wird plattformabhängig implemeniert.

Methoden der Klasse Imagepublic abstract Graphics getGraphics()

– Liefert einen grafischen Kontext, in den dieses Bild gezeichnet

werden kann. Funktioniert nur bei Offscreen-Images.

Page 15: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public abstract int getHeight(ImageObserver observer) Ermittelt über den übergebenen observer die Höhe des Bildes in Pixeln und liefert sie zurück. Falls der Observer die Höhe bisher noch nicht ermitteln konnte, wird -1 zurückgegeben.

public abstract int getWidth(ImageObserver observer) Ermittelt über den übergebenen observer die Breite des Bildes in Pixeln und liefert sie zurück. Falls der Observer die Höhe bisher noch nicht ermitteln konnte, wird -1 zurückgegeben.

Page 16: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

import java.awt.*; import java.awt.image.*; class Bild3 extends Frame { Image bild1; Image bild=Toolkit.getDefaultToolkit().getImage("BILD.jpg"); int bwidth; int bheight; int []pix; MemoryImageSource b1; public static void main(String[] args) { Bild3 b=new Bild3("Bild"); }

Page 17: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Bild3(String title) { super(title); setBounds(0,50,650,300); setLayout(new FlowLayout()); mediaTracker(); grab(bild,pix); mis(); Canvas c1=new Canvas() { public void paint(Graphics g) { g.drawImage(bild, 0,0,300,200,this); } }; c1.setBounds(0,0,300,200); add(c1);

Page 18: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Canvas c2=new Canvas() { public void paint(Graphics g) {

g.drawImage(bild1, 0, 0,300,200,this); } }; c2.setBounds(0,0,300,200); add(c2); setVisible(true); } public void mediaTracker() { MediaTracker tracker = new MediaTracker(this); tracker.addImage(bild,1);

Page 19: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

try { tracker.waitForID(1); } catch (InterruptedException e) { System.err.println("Error: "+e); } bwidth=bild.getWidth(this); bheight=bild.getHeight(this); pix=new int[bwidth*bheight]; } public void grab(Image img, int []pix) { // Kopiert die Bilddaten des übergebenen // Bildes in das übergebene Array PixelGrabber grabber = new PixelGrabber(img, 0, 0, bwidth, bheight, pix, 0, bwidth);

Page 20: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

try { grabber.grabPixels(); } catch (InterruptedException e) { e.printStackTrace(); } } public void mis() { b1= new MemoryImageSource(bwidth, bheight,

pix,0,bwidth ); bild1=Toolkit.getDefaultToolkit().createImage(b1); } }

Page 21: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

Klasse FileDialog

Die Klasse FileDialog implementiert einen Dialog, mit dem Dateien ausgewählt werden können. Der FileDialog kennt zwei Modi: LOAD, um Dateien zum Laden zu selektieren, und SAVE, um Dateien zu speichern. Es kann ein Filter für die anzuzeigenden Dateinamen gesetzt werden, so daß nur die Dateien angezeigt werden, deren Name auf den Filter paßt. Der FileDialog ist grundsätzlich modal.

Abgeleitet von Dialog->Window->Container->Component Konstruktoren der Klasse FileDialog public FileDialog(Frame parent)

– Erzeugt einen neuen FileDialog, um Dateien zu laden. Der Dialog erhält in der Fensterhierarchie den Vorfahr parent und einen leeren Titel.

Page 22: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public FileDialog(Frame parent, String title) – Erzeugt einen neuen FileDialog, um Dateien zu laden. Der Dialog

erhält in der Fensterhierarchie den Vorfahr parent und den Titel title.

Methoden der Klasse FileDialog public String getDirectory()

– Liefert das selektierte Verzeichnis des Dialogs. public String getFile()

– Liefert den selektierten Dateinamen nach Beendigung des Dialogs. public FilenameFilter getFilenameFilter()

– Liefert den momentanen Dateinamensfilter. public int getMode()

– Liefert den Modus des Dialogs (LOAD/SAVE). public synchronized void setDirectory(String dir)

– Setzt das Arbeitsverzeichnis des Dialogs auf dir.

Page 23: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

public synchronized void setFile(String file) – Setzt die Datei des Dialogs auf file.

public synchronized void setFilenameFilter(FilenameFilter filter) – Setzt einen neuen Filter für die Dateinamen. Es werden nur die

Dateien angezeigt, deren Name auf der in filter eingetragenen Zeichenkette paßt. filter ist hierbei eine Implementierung des Interface util.FilenameFilter. In dessen Methode accept muß das gewünschte Verhalten implementiert werden.

public void setMode(int mode) – Setzt den Modus des Dialogs auf mode.

Page 24: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

import java.awt.*; import java.awt.event.*; public class FDialog extends Frame implements ActionListener { FileDialog filedialog; Button open; Label l=new Label("File= "); public static void main(String[] args) { Frame f=new FDialog(); } FDialog() { open=new Button("OPEN"); setLayout(new BorderLayout()); Panel p = new Panel(); p.add(open); p.add(l);

Page 25: DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.

DVG3 - Bilder

open.addActionListener(this); add(p,BorderLayout.CENTER); setSize(200,100); setVisible(true); } public void actionPerformed(ActionEvent e) { FileDia(); } public void FileDia() { filedialog=new FileDialog(this,"openFile"); filedialog.setDirectory("c:"); filedialog.show(); System.out.println(filedialog.getDirectory()+filedialog.getFile()); l.setText("File="+filedialog.getFile()); } }