Java-Code mit Array

Wirtschaftsinformatiker

Bekanntes Mitglied
Ich habe einige Probleme mit diesem Code:
Java:
/**
 * SWBild ist eine Klasse, die Graustufenbilder repraesentiert und
 * manipuliert. Die Implementierung erfolgt durch ein einfaches
 * Bildformat: Die Bildpunkte werden in einem zweidimensionalen
 * Array von 'short'-Werten gehalten. Jeder Feldeintrag kann einen
 * Wert zwischen 0 und 255 annehmen. Andere Werte sind unzulaessig.
 * Der Wertebereich [0..255] repraesentiert den Graustufenbereich:
 * 0 fuer Schwarz, 255 fuer Weiss und dazwischenliegende Werte fuer
 * die Grauabstufungen.
 *
 * Beispielmethode 'dunkler': Ein geladenes Bild kann um
 * ein gegebenes 'delta' abgedunkelt werden.
 *
 */
class SWBild
{
    private int anzahlPiksel=0;

    // die Bilddaten dieses Bildes
    private short[][] _bilddaten;

    // die Breite dieses Bildes
    private int _breite;

    // die Hoehe dieses Bildes
    private int _hoehe;

    // Leinwand zur Anzeige
    private Leinwand _leinwand;

    /**
     * Initialisiert ein Bild mit einer Bilddatei. Der Benutzer kann interaktiv mit
     * Hilfe eines Dateidialogs die zu ladende Datei auswaehlen.
     */
    public SWBild()
    {
        _bilddaten = BildEinleser.liesBilddaten();
        if (_bilddaten != null)
        {
            aktualisiereBildgroesse(_bilddaten);
            erzeugeLeinwand();
        }
    }

    /**
     * Initialisiert ein Bild mit einer Bilddatei. Der Dateiname kann als absoluter
     * oder relativer Pfad uebergeben werden.
     *
     * @param bilddateiName
     *            der Name der Bilddatei
     */
    public SWBild(String bilddateiName)
    {
        _bilddaten = BildEinleser.liesBilddaten(bilddateiName);
        aktualisiereBildgroesse(_bilddaten);
        erzeugeLeinwand();
    }

    /**
     * Dieses Bild um einen Wert abdunkeln.
     *
     * @param delta
     *            Wert der Abdunkelung. Es wird mit dem Betrag von delta gerechnet,
     *            deshalb darf der Parameter sowohl positiv als auch negativ sein.
     */
    public void dunkler(int delta)
    {
        if (delta < 0)
        {
            delta = -delta;
        }

        /**
         * Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
         */
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                if ((_bilddaten[y][x] - delta) > 0) // Wert darf 0 nicht unterschreiten
                {
                    _bilddaten[y][x] = (short) (_bilddaten[y][x] - delta);
                }
                else
                {
                    _bilddaten[y][x] = 0;
                }
            }
        }
        // Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
        zeichneBild();
    }

    /**
     * Dieses Bild um einen Wert aufhellen.
     *
     * @param delta
     *            Wert der Aufhellung. Es wird mit dem Betrag von delta gerechnet,
     *            deshalb darf der Parameter sowohl positiv als auch negativ sein.
     */
    public void heller(int delta)
    {
        if (delta < 0)
        {
            delta = -delta;
        }

        /**
         * Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
         */
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                if ((_bilddaten[y][x] + delta) < 255)  // Wert darf 255 nicht überschreiten

                {
                    _bilddaten[y][x] = (short) (_bilddaten[y][x] + delta);
                }
                else
                {
                    _bilddaten[y][x] = 255;
                }
            }
        }
        // Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
        zeichneBild();
    }

    /**
     * Dieses Bild invertieren.
     */
    public void invertieren()
    {
        // Durch alle Bildpunkte des Bildes gehen und jeden Wert "invertieren"
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                _bilddaten[y][x] = (short) (255 - _bilddaten[y][x]);
            }
        }
        zeichneBild();
    }

    /**
     * Dieses Bild horizontal spiegeln.
     */
    public void horizontalSpiegeln()
    {
        for (int y = 0; y < _hoehe/2; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                short i = _bilddaten[y][x];
                _bilddaten[y][x] = _bilddaten[_hoehe - y-1][x];
                _bilddaten[_hoehe - y-1][x] = i;
            }
        }
        zeichneBild();

    }

    /**
     * Dieses Bild weichzeichnen.
     */
    public void weichzeichnen()
    {
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                int _nebenBildpunkte = 0; 
                int anzahlPiksel=0;          
                _nebenBildpunkte += weichzeichnen(y+1, x);
                _nebenBildpunkte += weichzeichnen(y+1, x+1);
                _nebenBildpunkte += weichzeichnen(y+1, x-1);
                _nebenBildpunkte += weichzeichnen(y, x+1);
                _nebenBildpunkte += weichzeichnen(y, x-1);
                _nebenBildpunkte += weichzeichnen(y-1, x+1);
                _nebenBildpunkte += weichzeichnen(y-1, x);
                _nebenBildpunkte += weichzeichnen(y-1, x-1);
                _nebenBildpunkte = _nebenBildpunkte/anzahlPiksel;
                _bilddaten[y][x] = (short) _nebenBildpunkte;
            }
        }
        zeichneBild();
    }

    public int weichzeichnen(int y, int x) {
        if (x >= 0 && x < _breite && y >= 0 && y < _hoehe) {
            anzahlPiksel++;
            return _bilddaten[y][x];
        }
        else
        {
            return 0;
        }

    }

    /**
     * Dieses Bild am Mittelpunkt spiegeln.
     */
    public void punktpiegeln()
    {
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                _bilddaten[y][x] = _bilddaten[_hoehe-y-1][x];
            }
        }
        zeichneBild();

    }

    /**
     * Erzeuge bei diesem Bild einen Spot mit Radius r, Mittelpunkt x0,y0 und
     * Beleuchtungsintensitaet i. Ausserhalb von r nimmt die Ausleuchtung linear ab.
     * Wie im wirklichen Leben...
     *
     * @param xo
     *            x-Koordinate des Mittelpunktes
     * @param yo
     *            y-Koordinate des Mittelpunktes
     * @param r
     *            Radius
     * @param i
     *            Beleuchtungsintesitaet
     */
    public void spot(int x0, int y0, int r, short i)
    {
        short i0 = 0;
        for (int k = _breite/2; k >= r; k--) {
            for (int y=0; y<_hoehe; y++){
                for (int x=0; x<_breite;x++){
                    if(((x-x0)*(x-x0))+((y-y0)*(y-y0))<=k*k){ 
                        if (_bilddaten[y][x] + i0 > 255) {
                            _bilddaten[y][x] = 255;
                        } else if (_bilddaten[y][x] + i0 < 0) {
                            _bilddaten[y][x] = 0;
                        } else {
                            _bilddaten[y][x] = (short) (_bilddaten[y][x] + i0);
                         
                        }
                    }
                    if (i > i0){
                        i0++;//die Variable erhöht allmählich den Pixelwert und bringt die Farbe mit jedem Kreis näher an Weiß
                    }
                }
            }
        }
        zeichneBild();
    }  

    /**
     * Gib den Wert eines einzelnen Bildpunktes zurueck.
     *
     * @param y
     *            die y-Koordinate des Bildpunktes.
     * @param x
     *            die x-Koordinate des Bildpunktes.
     * @return den Wert des angegebenen Bildpunktes.
     */
    public short gibBildpunkt(int y, int x)
    {
        return _bilddaten[y][x];
    }

    // ==== private Hilfsmethoden ====

    /**
     * Zeichnet das Bild in _bilddaten neu
     */
    private void zeichneBild()
    {
        _leinwand.sichtbarMachen();
        _leinwand.zeichneBild(_bilddaten);
    }

    /**
     * Hoehe und Breite neu berechnen, nachdem die Bilddaten veraendert worden sind.
     */
    private void aktualisiereBildgroesse(short[][] bilddaten)
    {
        _hoehe = bilddaten.length;
        if (_hoehe == 0)
        {
            _breite = 0;
        }
        else
        {
            _breite = bilddaten[0].length;
        }
    }

    /**
     * Erzeuge die Leinwand zur Darstellung und zeige sie an.
     */
    private void erzeugeLeinwand()
    {
        _leinwand = new Leinwand("Bildbetrachter", _breite, _hoehe);

        zeichneBild();
    }
}
 
Zuletzt bearbeitet:

Wirtschaftsinformatiker

Bekanntes Mitglied
[x] und [y] sind unsere Breite und Höhe. Wenn eine Instanz erzeuge und für Delta 5 gebe, dann sehe ich im Debugger, dass nur x-Werte um 1 erhöht und nicht Y-Werte, aber warum? Dunkler oder heller hat es nur mit Breite zu tun?
 

LimDul

Top Contributor
Welche x und y werte? Es gibt im Array keine "x"-Werte. Es gibt nur Werte, die durch ein Koordinaten-Paar aus X-und Y beschrieben werden.
 

shokwave

Mitglied
[x] und [y] sind unsere Breite und Höhe. Wenn eine Instanz erzeuge und für Delta 5 gebe, dann sehe ich im Debugger, dass nur x-Werte um 1 erhöht und nicht Y-Werte, aber warum? Dunkler oder heller hat es nur mit Breite zu tun?
Wie kommst du darauf das sich nur x ändern würde? Wie hast du denn in den Debugger gesehen?

Die innere Schleife wird so oft durchlaufen(und x inkrementiert), wie dein Bild breit ist und dann wird y um 1 erhöht.
Dann wird wieder die innere Schleife so oft durchlaufen, wie dein Bild breit ist und dann wieder y inkrementiert.
Das ganze wiederum passiert so oft, wie dein Bild hoch ist.
 

Jw456

Top Contributor
Du gehst ja mit zwei For Schleifen das Bild Pixel für Pixel durch.

Bei der inneren Schleife gehst du halt eine Zeile durch testet ob der Pixel zu hell ist und wenn ja machst du ihn dunkler.
Dann kommt die zweite Zeile jetzt gehst du wider die Pixel in x Richtung durch. ….



Bei einem zb 10X 10 Pixel Bild wird die innere For 10 mal durchlaufen.

Die äußere For (Y) nur einmal.
 

Wirtschaftsinformatiker

Bekanntes Mitglied
Ich habe einige Probleme mit diesem Code:
Java:
/**
 * SWBild ist eine Klasse, die Graustufenbilder repraesentiert und
 * manipuliert. Die Implementierung erfolgt durch ein einfaches
 * Bildformat: Die Bildpunkte werden in einem zweidimensionalen
 * Array von 'short'-Werten gehalten. Jeder Feldeintrag kann einen
 * Wert zwischen 0 und 255 annehmen. Andere Werte sind unzulaessig.
 * Der Wertebereich [0..255] repraesentiert den Graustufenbereich:
 * 0 fuer Schwarz, 255 fuer Weiss und dazwischenliegende Werte fuer
 * die Grauabstufungen.
 *
 * Beispielmethode 'dunkler': Ein geladenes Bild kann um
 * ein gegebenes 'delta' abgedunkelt werden.
 *
 */
class SWBild
{
    private int anzahlPiksel=0;

    // die Bilddaten dieses Bildes
    private short[][] _bilddaten;

    // die Breite dieses Bildes
    private int _breite;

    // die Hoehe dieses Bildes
    private int _hoehe;

    // Leinwand zur Anzeige
    private Leinwand _leinwand;

    /**
     * Initialisiert ein Bild mit einer Bilddatei. Der Benutzer kann interaktiv mit
     * Hilfe eines Dateidialogs die zu ladende Datei auswaehlen.
     */
    public SWBild()
    {
        _bilddaten = BildEinleser.liesBilddaten();
        if (_bilddaten != null)
        {
            aktualisiereBildgroesse(_bilddaten);
            erzeugeLeinwand();
        }
    }

    /**
     * Initialisiert ein Bild mit einer Bilddatei. Der Dateiname kann als absoluter
     * oder relativer Pfad uebergeben werden.
     *
     * @param bilddateiName
     *            der Name der Bilddatei
     */
    public SWBild(String bilddateiName)
    {
        _bilddaten = BildEinleser.liesBilddaten(bilddateiName);
        aktualisiereBildgroesse(_bilddaten);
        erzeugeLeinwand();
    }

    /**
     * Dieses Bild um einen Wert abdunkeln.
     *
     * @param delta
     *            Wert der Abdunkelung. Es wird mit dem Betrag von delta gerechnet,
     *            deshalb darf der Parameter sowohl positiv als auch negativ sein.
     */
    public void dunkler(int delta)
    {
        if (delta < 0)
        {
            delta = -delta;
        }

        /**
         * Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
         */
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                if ((_bilddaten[y][x] - delta) > 0) // Wert darf 0 nicht unterschreiten
                {
                    _bilddaten[y][x] = (short) (_bilddaten[y][x] - delta);
                }
                else
                {
                    _bilddaten[y][x] = 0;
                }
            }
        }
        // Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
        zeichneBild();
    }

    /**
     * Dieses Bild um einen Wert aufhellen.
     *
     * @param delta
     *            Wert der Aufhellung. Es wird mit dem Betrag von delta gerechnet,
     *            deshalb darf der Parameter sowohl positiv als auch negativ sein.
     */
    public void heller(int delta)
    {
        if (delta < 0)
        {
            delta = -delta;
        }

        /**
         * Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
         */
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                if ((_bilddaten[y][x] + delta) < 255)  // Wert darf 255 nicht überschreiten

                {
                    _bilddaten[y][x] = (short) (_bilddaten[y][x] + delta);
                }
                else
                {
                    _bilddaten[y][x] = 255;
                }
            }
        }
        // Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
        zeichneBild();
    }

    /**
     * Dieses Bild invertieren.
     */
    public void invertieren()
    {
        // Durch alle Bildpunkte des Bildes gehen und jeden Wert "invertieren"
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                _bilddaten[y][x] = (short) (255 - _bilddaten[y][x]);
            }
        }
        zeichneBild();
    }

    /**
     * Dieses Bild horizontal spiegeln.
     */
    public void horizontalSpiegeln()
    {
        for (int y = 0; y < _hoehe/2; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                short i = _bilddaten[y][x];
                _bilddaten[y][x] = _bilddaten[_hoehe - y-1][x];
                _bilddaten[_hoehe - y-1][x] = i;
            }
        }
        zeichneBild();

    }

    /**
     * Dieses Bild weichzeichnen.
     */
    public void weichzeichnen()
    {
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                int _nebenBildpunkte = 0;
                int anzahlPiksel=0;         
                _nebenBildpunkte += weichzeichnen(y+1, x);
                _nebenBildpunkte += weichzeichnen(y+1, x+1);
                _nebenBildpunkte += weichzeichnen(y+1, x-1);
                _nebenBildpunkte += weichzeichnen(y, x+1);
                _nebenBildpunkte += weichzeichnen(y, x-1);
                _nebenBildpunkte += weichzeichnen(y-1, x+1);
                _nebenBildpunkte += weichzeichnen(y-1, x);
                _nebenBildpunkte += weichzeichnen(y-1, x-1);
                _nebenBildpunkte = _nebenBildpunkte/anzahlPiksel;
                _bilddaten[y][x] = (short) _nebenBildpunkte;
            }
        }
        zeichneBild();
    }

    public int weichzeichnen(int y, int x) {
        if (x >= 0 && x < _breite && y >= 0 && y < _hoehe) {
            anzahlPiksel++;
            return _bilddaten[y][x];
        }
        else
        {
            return 0;
        }

    }

    /**
     * Dieses Bild am Mittelpunkt spiegeln.
     */
    public void punktpiegeln()
    {
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                _bilddaten[y][x] = _bilddaten[_hoehe-y-1][x];
            }
        }
        zeichneBild();

    }

    /**
     * Erzeuge bei diesem Bild einen Spot mit Radius r, Mittelpunkt x0,y0 und
     * Beleuchtungsintensitaet i. Ausserhalb von r nimmt die Ausleuchtung linear ab.
     * Wie im wirklichen Leben...
     *
     * @param xo
     *            x-Koordinate des Mittelpunktes
     * @param yo
     *            y-Koordinate des Mittelpunktes
     * @param r
     *            Radius
     * @param i
     *            Beleuchtungsintesitaet
     */
    public void spot(int x0, int y0, int r, short i)
    {
        short i0 = 0;
        for (int k = _breite/2; k >= r; k--) {
            for (int y=0; y<_hoehe; y++){
                for (int x=0; x<_breite;x++){
                    if(((x-x0)*(x-x0))+((y-y0)*(y-y0))<=k*k){
                        if (_bilddaten[y][x] + i0 > 255) {
                            _bilddaten[y][x] = 255;
                        } else if (_bilddaten[y][x] + i0 < 0) {
                            _bilddaten[y][x] = 0;
                        } else {
                            _bilddaten[y][x] = (short) (_bilddaten[y][x] + i0);
                        
                        }
                    }
                    if (i > i0){
                        i0++;//die Variable erhöht allmählich den Pixelwert und bringt die Farbe mit jedem Kreis näher an Weiß
                    }
                }
            }
        }
        zeichneBild();
    } 

    /**
     * Gib den Wert eines einzelnen Bildpunktes zurueck.
     *
     * @param y
     *            die y-Koordinate des Bildpunktes.
     * @param x
     *            die x-Koordinate des Bildpunktes.
     * @return den Wert des angegebenen Bildpunktes.
     */
    public short gibBildpunkt(int y, int x)
    {
        return _bilddaten[y][x];
    }

    // ==== private Hilfsmethoden ====

    /**
     * Zeichnet das Bild in _bilddaten neu
     */
    private void zeichneBild()
    {
        _leinwand.sichtbarMachen();
        _leinwand.zeichneBild(_bilddaten);
    }

    /**
     * Hoehe und Breite neu berechnen, nachdem die Bilddaten veraendert worden sind.
     */
    private void aktualisiereBildgroesse(short[][] bilddaten)
    {
        _hoehe = bilddaten.length;
        if (_hoehe == 0)
        {
            _breite = 0;
        }
        else
        {
            _breite = bilddaten[0].length;
        }
    }

    /**
     * Erzeuge die Leinwand zur Darstellung und zeige sie an.
     */
    private void erzeugeLeinwand()
    {
        _leinwand = new Leinwand("Bildbetrachter", _breite, _hoehe);

        zeichneBild();
    }
}
Ich habe einige Probleme mit diesem Code:
Java:
/**
 * SWBild ist eine Klasse, die Graustufenbilder repraesentiert und
 * manipuliert. Die Implementierung erfolgt durch ein einfaches
 * Bildformat: Die Bildpunkte werden in einem zweidimensionalen
 * Array von 'short'-Werten gehalten. Jeder Feldeintrag kann einen
 * Wert zwischen 0 und 255 annehmen. Andere Werte sind unzulaessig.
 * Der Wertebereich [0..255] repraesentiert den Graustufenbereich:
 * 0 fuer Schwarz, 255 fuer Weiss und dazwischenliegende Werte fuer
 * die Grauabstufungen.
 *
 * Beispielmethode 'dunkler': Ein geladenes Bild kann um
 * ein gegebenes 'delta' abgedunkelt werden.
 *
 */
class SWBild
{
    private int anzahlPiksel=0;

    // die Bilddaten dieses Bildes
    private short[][] _bilddaten;

    // die Breite dieses Bildes
    private int _breite;

    // die Hoehe dieses Bildes
    private int _hoehe;

    // Leinwand zur Anzeige
    private Leinwand _leinwand;

    /**
     * Initialisiert ein Bild mit einer Bilddatei. Der Benutzer kann interaktiv mit
     * Hilfe eines Dateidialogs die zu ladende Datei auswaehlen.
     */
    public SWBild()
    {
        _bilddaten = BildEinleser.liesBilddaten();
        if (_bilddaten != null)
        {
            aktualisiereBildgroesse(_bilddaten);
            erzeugeLeinwand();
        }
    }

    /**
     * Initialisiert ein Bild mit einer Bilddatei. Der Dateiname kann als absoluter
     * oder relativer Pfad uebergeben werden.
     *
     * @param bilddateiName
     *            der Name der Bilddatei
     */
    public SWBild(String bilddateiName)
    {
        _bilddaten = BildEinleser.liesBilddaten(bilddateiName);
        aktualisiereBildgroesse(_bilddaten);
        erzeugeLeinwand();
    }

    /**
     * Dieses Bild um einen Wert abdunkeln.
     *
     * @param delta
     *            Wert der Abdunkelung. Es wird mit dem Betrag von delta gerechnet,
     *            deshalb darf der Parameter sowohl positiv als auch negativ sein.
     */
    public void dunkler(int delta)
    {
        if (delta < 0)
        {
            delta = -delta;
        }

        /**
         * Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
         */
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                if ((_bilddaten[y][x] - delta) > 0) // Wert darf 0 nicht unterschreiten
                {
                    _bilddaten[y][x] = (short) (_bilddaten[y][x] - delta);
                }
                else
                {
                    _bilddaten[y][x] = 0;
                }
            }
        }
        // Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
        zeichneBild();
    }

    /**
     * Dieses Bild um einen Wert aufhellen.
     *
     * @param delta
     *            Wert der Aufhellung. Es wird mit dem Betrag von delta gerechnet,
     *            deshalb darf der Parameter sowohl positiv als auch negativ sein.
     */
    public void heller(int delta)
    {
        if (delta < 0)
        {
            delta = -delta;
        }

        /**
         * Durch alle Bytes des Bildes gehen und jeden Wert dekrementieren
         */
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                if ((_bilddaten[y][x] + delta) < 255)  // Wert darf 255 nicht überschreiten

                {
                    _bilddaten[y][x] = (short) (_bilddaten[y][x] + delta);
                }
                else
                {
                    _bilddaten[y][x] = 255;
                }
            }
        }
        // Neuzeichnen der Bildleinwand, basierend auf den Werten in _bilddaten:
        zeichneBild();
    }

    /**
     * Dieses Bild invertieren.
     */
    public void invertieren()
    {
        // Durch alle Bildpunkte des Bildes gehen und jeden Wert "invertieren"
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                _bilddaten[y][x] = (short) (255 - _bilddaten[y][x]);
            }
        }
        zeichneBild();
    }

    /**
     * Dieses Bild horizontal spiegeln.
     */
    public void horizontalSpiegeln()
    {
        for (int y = 0; y < _hoehe/2; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                short i = _bilddaten[y][x];
                _bilddaten[y][x] = _bilddaten[_hoehe - y-1][x];
                _bilddaten[_hoehe - y-1][x] = i;
            }
        }
        zeichneBild();

    }

    /**
     * Dieses Bild weichzeichnen.
     */
    public void weichzeichnen()
    {
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                int _nebenBildpunkte = 0;
                int anzahlPiksel=0;         
                _nebenBildpunkte += weichzeichnen(y+1, x);
                _nebenBildpunkte += weichzeichnen(y+1, x+1);
                _nebenBildpunkte += weichzeichnen(y+1, x-1);
                _nebenBildpunkte += weichzeichnen(y, x+1);
                _nebenBildpunkte += weichzeichnen(y, x-1);
                _nebenBildpunkte += weichzeichnen(y-1, x+1);
                _nebenBildpunkte += weichzeichnen(y-1, x);
                _nebenBildpunkte += weichzeichnen(y-1, x-1);
                _nebenBildpunkte = _nebenBildpunkte/anzahlPiksel;
                _bilddaten[y][x] = (short) _nebenBildpunkte;
            }
        }
        zeichneBild();
    }

    public int weichzeichnen(int y, int x) {
        if (x >= 0 && x < _breite && y >= 0 && y < _hoehe) {
            anzahlPiksel++;
            return _bilddaten[y][x];
        }
        else
        {
            return 0;
        }

    }

    /**
     * Dieses Bild am Mittelpunkt spiegeln.
     */
    public void punktpiegeln()
    {
        for (int y = 0; y < _hoehe; y++)
        {
            for (int x = 0; x < _breite; x++)
            {
                _bilddaten[y][x] = _bilddaten[_hoehe-y-1][x];
            }
        }
        zeichneBild();

    }

    /**
     * Erzeuge bei diesem Bild einen Spot mit Radius r, Mittelpunkt x0,y0 und
     * Beleuchtungsintensitaet i. Ausserhalb von r nimmt die Ausleuchtung linear ab.
     * Wie im wirklichen Leben...
     *
     * @param xo
     *            x-Koordinate des Mittelpunktes
     * @param yo
     *            y-Koordinate des Mittelpunktes
     * @param r
     *            Radius
     * @param i
     *            Beleuchtungsintesitaet
     */
    public void spot(int x0, int y0, int r, short i)
    {
        short i0 = 0;
        for (int k = _breite/2; k >= r; k--) {
            for (int y=0; y<_hoehe; y++){
                for (int x=0; x<_breite;x++){
                    if(((x-x0)*(x-x0))+((y-y0)*(y-y0))<=k*k){
                        if (_bilddaten[y][x] + i0 > 255) {
                            _bilddaten[y][x] = 255;
                        } else if (_bilddaten[y][x] + i0 < 0) {
                            _bilddaten[y][x] = 0;
                        } else {
                            _bilddaten[y][x] = (short) (_bilddaten[y][x] + i0);
                        
                        }
                    }
                    if (i > i0){
                        i0++;//die Variable erhöht allmählich den Pixelwert und bringt die Farbe mit jedem Kreis näher an Weiß
                    }
                }
            }
        }
        zeichneBild();
    } 

    /**
     * Gib den Wert eines einzelnen Bildpunktes zurueck.
     *
     * @param y
     *            die y-Koordinate des Bildpunktes.
     * @param x
     *            die x-Koordinate des Bildpunktes.
     * @return den Wert des angegebenen Bildpunktes.
     */
    public short gibBildpunkt(int y, int x)
    {
        return _bilddaten[y][x];
    }

    // ==== private Hilfsmethoden ====

    /**
     * Zeichnet das Bild in _bilddaten neu
     */
    private void zeichneBild()
    {
        _leinwand.sichtbarMachen();
        _leinwand.zeichneBild(_bilddaten);
    }

    /**
     * Hoehe und Breite neu berechnen, nachdem die Bilddaten veraendert worden sind.
     */
    private void aktualisiereBildgroesse(short[][] bilddaten)
    {
        _hoehe = bilddaten.length;
        if (_hoehe == 0)
        {
            _breite = 0;
        }
        else
        {
            _breite = bilddaten[0].length;
        }
    }

    /**
     * Erzeuge die Leinwand zur Darstellung und zeige sie an.
     */
    private void erzeugeLeinwand()
    {
        _leinwand = new Leinwand("Bildbetrachter", _breite, _hoehe);

        zeichneBild();
    }
}
Wir haben für weichzeichnen zwei Methode definiert, weil bei erste Type short steht, obwohl wir Type int brauchen, richtig?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
S Brauche hilfe in Java [Fehler in mein Code]? Java Basics - Anfänger-Themen 2
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
C Klassendiagramm aus Java-Code entwickeln Java Basics - Anfänger-Themen 3
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
T Java Code erklären Java Basics - Anfänger-Themen 7
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
E ASCII-Code in Java ausgeben Java Basics - Anfänger-Themen 6
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
D Text als Code in java-forum.com formatieren. Wie ? Java Basics - Anfänger-Themen 3
P Java-Code funktioniert nicht Java Basics - Anfänger-Themen 13
snipesss Java-Code gedownloaded, funktioniert aber nicht? Java Basics - Anfänger-Themen 9
T Java Code erklären Java Basics - Anfänger-Themen 5
S Hinweis zu Fehler im Kalender-Code - Aufgabe 5.3 aus Grundkurs Programmieren in Java 7. Auflage Java Basics - Anfänger-Themen 4
A Zeichentool mit automatischer Java Code Erstellung Java Basics - Anfänger-Themen 1
Nicole1989 Was Bewirkt dieser Java Code? Java Basics - Anfänger-Themen 4
S Input/Output JS Source code in Java nutzen Java Basics - Anfänger-Themen 1
J Java was Started but Returned Exit Code=13 in Eclipse Java Basics - Anfänger-Themen 13
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
I Java Code so gut es geht Kommentieren Java Basics - Anfänger-Themen 4
K Suche Hilfe bei einfachem Java Code ( Debuggen ) Java Basics - Anfänger-Themen 1
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
C CMD Befehl + Variable im Java-Code ausführen Java Basics - Anfänger-Themen 8
B Variablen im Java-Code selber "ausrechnen" Java Basics - Anfänger-Themen 8
O Rätsel Java Code Java Basics - Anfänger-Themen 8
O Forum: Per Java-Code anmelden? Java Basics - Anfänger-Themen 2
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
M Code recompilen mit älterem Java Java Basics - Anfänger-Themen 3
C Fehler in Java-Code finden Java Basics - Anfänger-Themen 17
K Java source code generieren Java Basics - Anfänger-Themen 5
H Java- Source Code Java Basics - Anfänger-Themen 8
F uralter Java Code Java Basics - Anfänger-Themen 3
L Library nötig, obwohl nicht in Java-Code verwendet Java Basics - Anfänger-Themen 4
N Mac - Java Code aus dem Forum kopieren Java Basics - Anfänger-Themen 12
J VB Code mit Java ausführen lassen? Java Basics - Anfänger-Themen 2
W Java-Code auf Konsole ausgeben - Wie? Java Basics - Anfänger-Themen 10
K Java Code rechnen Java Basics - Anfänger-Themen 7
S Hilfe - java.lang.RuntimeException: Uncompilable source code - incompatible types Java Basics - Anfänger-Themen 10
A Stück Java code im laufenden Betrieb einlesen und ausführen Java Basics - Anfänger-Themen 9
V Vom Aktivitätsdiagramm zum Java-Code Java Basics - Anfänger-Themen 12
saxman Java Source Code Download Java Basics - Anfänger-Themen 2
H Hilfe bei Java Code Java Basics - Anfänger-Themen 3
X Objektorientierte Java Programmierung - 3 Fragen zum Code Java Basics - Anfänger-Themen 5
astralarse JNI: Echt(!) nativen Code in Java ausführen? Java Basics - Anfänger-Themen 6
C Bäume in Java. Code funktioniert nicht Java Basics - Anfänger-Themen 12
zilti Externen Java-Code laden Java Basics - Anfänger-Themen 3
G Java Code -> RTF Java Basics - Anfänger-Themen 6
G source code von Java classes Java Basics - Anfänger-Themen 12
G Jar-File erzuegen, das Code a verschiedenen Java Versionen? Java Basics - Anfänger-Themen 4
D Probleme bei Code Portierung von C# nach Java [Gelöst] Java Basics - Anfänger-Themen 4
L UML in Java-Code Java Basics - Anfänger-Themen 5
J Java-Code in UML 2.0 Java Basics - Anfänger-Themen 38
D Java Code verbessern? Java Basics - Anfänger-Themen 8
B Java 1.0 Code in NetBeans IDE 5.0 ??? Java Basics - Anfänger-Themen 4
M Benutzung von fremden Java-Code mit Eclipse Java Basics - Anfänger-Themen 3
M Source Code von java.util.SubList Java Basics - Anfänger-Themen 2
G PHP Code -> Java Code Java Basics - Anfänger-Themen 6
M Aus WSDL Java-Code generieren. Java Basics - Anfänger-Themen 1
C Problem mit Code aus "Sprechen Sie Java" Java Basics - Anfänger-Themen 13
D HTML code in java generieren. Java Basics - Anfänger-Themen 6
S Java Compiler? oder doch der Code? Java Basics - Anfänger-Themen 6
F Fehler im Java Code, hilfe? Java Basics - Anfänger-Themen 9
A aus Java-Code eine jar-Datei ausführen Java Basics - Anfänger-Themen 8
B Code von Java-Funktionen einsehen Java Basics - Anfänger-Themen 2
M String als Java-Code ausführen Java Basics - Anfänger-Themen 4
B Wie funktioniert die implementierung von c code in Java? Java Basics - Anfänger-Themen 7
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben