Announcement

Collapse
No announcement yet.

ImageObserver erstellen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ImageObserver erstellen?

    Hallo Forum,<br><br>

    <p>als Java-Einsteiger versuche ich momentan meine erste eigenständige Applikation zu erstellen. Leider bin ich schon recht bald auf (unüberwindliche?) Hindernisse gestossen. Folgendes Problem hat sich mir eröffnet:</p><br>

    <p>Einem Frame soll ein Canvas hinzugefügt werden, der wiederum ein Bild beinhalten soll. Die Methode drawImage benötigt jedoch einen ImageObserver, der das Laden des Bildes überwacht. Bei Applets kann das Applet selbst diese Funktion übernehmen (???), ich gebe also als Observer das Schlüsselwort 'this' an. In einer Applikation funktioniert das aber nicht. Der Versuch, den Canvas bzw. 'null' als ImageObserver zu übergeben schlug fehl. Wie kann ich einen Observer erstellen (instantiieren) ???</p><br>

    <p>Möglicherweise liegt mein Problem aber auch im Ladevorgang des Bildes begründet. Wo 'sucht' sich eine Applikation bei der Methode getImage(String) denn das Bild? <br>Anbei einen kurzen Auszug aus meinem Programm. Vielleicht erbarmt sich ja jemand meiner und hilft mir mit einem Tip weiter.</p><br><br>

    <p>Frame meinFrame = new Frame("mein Fenster");</p>
    <p>Graphics meinGraphics;</p>
    <p>Canvas meinCanvas;</p>
    <p>meinCanvas = new Canvas();</p>
    <p>meinFrame.add(meinCanvas);</p>
    <p>Toolkit tk = meinFrame.getToolkit();</p>
    <p>meinFrame.setSize(tk.getScreenSize());</p>
    <p>meinFrame.setVisible(true);</p>
    <p>meinGraphics = meinCanvas.getGraphics();</p>
    <p>Image Bild;</p>
    <p>Bild = tk.getImage("Photo.jpg");</p>
    <p>meinGraphics.drawImage(Bild,0,0,meinCanvas);</p><br><br>

    Vielen Dank an jeden Helfer schon im voraus,

    Carsten Büchert

  • #2
    Hallo Carsten!

    Das Rätsel um den ImageObserver:

    Das Interface definiert lediglich eine Methode, die immer aufgerufen wird, wenn wieder ein Teil des Bildes geladen wurde und erwartet als Antwort ein Flag, ob weitergelden werden soll oder nicht.

    So kann ein Programm z.B. nach dem Laden des Imageheaders den Vorgang abbrechen, wenn nur die Größeninfos, nicht aber die Bilddaten selbst benötigt werden.

    Im Regelfall lädt man das Bild wohl komplett. Hierzu implementiert man einfach das Interface ImageObserver in seiner Klasse:

    public class XY implements ImageObserver
    {
    boolean imageUpdate(Image img, int infoflags,
    int x, int y, int width, int height)
    {
    return true;
    }
    .
    .
    .
    }

    Das war alles.

    Ja

    Comment

    Working...
    X