Java-Code?

1 Antwort

Der Grund dafür, dass die Hälfte der Höhe des Bildes verwendet wird, ist, dass es nicht notwendig ist, alle Pixel des Bildes zu bearbeiten. Wenn das Bild horizontal gespiegelt wird, sind die Änderungen an den Pixeln auf der oberen Hälfte des Bildes symmetrisch zu den Änderungen an den Pixeln auf der unteren Hälfte des Bildes. Daher ist es ausreichend, nur die Pixel in der oberen Hälfte zu bearbeiten und die Änderungen auf die Pixel in der unteren Hälfte zu übertragen.

Das gleiche gilt für den Ausdruck "_hoehe - y-1". Diese Formel wird verwendet, um den y-Wert des symmetrischen Pixels auf der unteren Hälfte des Bildes zu bestimmen. Wenn das Bild horizontal gespiegelt wird, wird das Pixel an der Stelle (x, y) auf der oberen Hälfte des Bildes mit dem Pixel an der Stelle (x, _hoehe - y-1) auf der unteren Hälfte des Bildes vertauscht.

Das "-1" in der Formel wird hinzugefügt, da die y-Werte im Bild von 0 bis _hoehe-1 reichen. Wenn zum Beispiel die Höhe des Bildes 100 Pixel ist, reichen die y-Werte von 0 bis 99. Wenn also y auf 50 gesetzt wird, entspricht das dem Pixel in der Mitte des Bildes. Der y-Wert des symmetrischen Pixels auf der unteren Hälfte des Bildes wäre dann _hoehe - y-1 = 100 - 50 - 1 = 49.

Woher ich das weiß:Studium / Ausbildung – Hochschulabschluss in Informatik (MSc)

Mathematik2000 
Fragesteller
 18.12.2022, 18:15

Kannst du bitte auch diese Methode erklären?

 /**
     * Dieses Bild weichzeichnen.
     */
    public void weichzeichnen()
    {
        int a=0;
        short[][] _kopie = new short[_hoehe][_breite];


        for (int y=1;y<_hoehe-1;y++)
        {
            for (int x=1;x<_breite-1;x++)
            {
                //TODO randbearbeiten y=0...hoehe
                a=(_bilddaten[y+1][x+1]+_bilddaten[y-1][x-1]+_bilddaten[y+1][x-1]+_bilddaten[y-1][x+1]+_bilddaten[y][x+1]+_bilddaten[y][x-1]+_bilddaten[y+1][x]+_bilddaten[y-1][x])/8;
                _kopie[y][x]=(short)a;                
            }
        }
        _bilddaten=_kopie;
        zeichneBild();


    }
0
DasZitrone  18.12.2022, 19:10
@Mathematik2000

Dieser Code implementiert eine Funktion namens "weichzeichnen", die verwendet wird, um ein Bild zu glätten oder zu verwischen. Der Code geht durch jedes Pixel im Bild, außer den Rändern, und berechnet einen neuen Wert für das Pixel basierend auf den Werten der acht benachbarten Pixel. Dieser neue Wert wird in einem Array namens "_kopie" gespeichert. Nachdem alle Pixel im Bild bearbeitet wurden, wird das ursprüngliche Bilddaten-Array durch das _kopie-Array ersetzt und das Bild neu gezeichnet.

Im Detail:

  • Zunächst wird eine "for"-Schleife verwendet, um durch jedes Pixel im Bild zu iterieren, außer den Rändern (das sind die Pixel, deren y-Koordinate 1 oder _hoehe-2 ist).
  • Innerhalb der Schleife wird eine weitere "for"-Schleife verwendet, um durch jedes Pixel in der aktuellen Zeile zu iterieren, außer den Rändern (das sind die Pixel, deren x-Koordinate 1 oder _breite-2 ist).
  • Für jedes Pixel wird dann der Durchschnittswert der acht benachbarten Pixel berechnet und in der Variablen "a" gespeichert. Der Durchschnittswert wird berechnet, indem man die Summe der acht benachbarten Pixel teilt durch acht.
  • Schließlich wird der Wert von "a" in das _kopie-Array an der Stelle des aktuellen Pixels gespeichert.
  • Nachdem alle Pixel im Bild bearbeitet wurden, wird das ursprüngliche Bilddaten-Array durch das _kopie-Array ersetzt und das Bild mithilfe der Funktion "zeichneBild" neu gezeichnet.

Ich hoffe, dass diese Erklärung hilfreich war. Lass mich wissen, falls du noch Fragen hast!
PS: Du kannst mich auch als Freund adden, dann kann ich dir das privat auch noch genauer erklären.

0