IMAGES (Bilder)

Werbung
IMAGES (Bilder)
Vortrag : Ronny Kuhnert am 9. November 1999
DVG3 - Bilder
Abstrakte Klasse Toolkit

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.
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.
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
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);
}
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
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.
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.
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);
}
}








}
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.
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.
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.
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 RGBFarbmodell verwendet.
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 Image
public abstract Graphics getGraphics()
– Liefert einen grafischen Kontext, in den dieses Bild gezeichnet
werden kann. Funktioniert nur bei Offscreen-Images.
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.
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");
}
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);
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);
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);
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);
}












}
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.
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.
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.
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);
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());
}
}
DVG3 - Bilder
Herunterladen