Methoden Vertikales spiegeln eines Bildes (zweidimensionale Arrays)

chaoshoney

Mitglied
Hallihallo,

ich versuche momentan ein Bild vertikal zu spiegeln, aber so richtig, schaff ich es nicht.

Code:
public void vertikalSpiegeln()
  {
    for (int y = 0; y < _hoehe; y++)
    {
       for (int x = 0; x < _breite/2; x++)
      {
        short tmp = _bilddaten[y][x];
        _bilddaten[y][x] = (short) _bilddaten[_hoehe-y-1][x];
        _bilddaten[_hoehe-y-1][x] = tmp;
      }
    }
  zeichneBild();
  }

ist meine Methode, in der ich versuche das Bild umzudrehen. Wenn ich diese aber aufrufe, dann tut sich rein gar nichts. Ich weiß leider nicht, wo mein Fehler ist. 🙁 Kann mir da irgendjemand einen Tipp geben, wo der Fehler liegt? Wäre sehr glücklich über jede Hilfe!
 
Das Problem ist, dass ich momentan noch in der Entwicklungsumgebung Bluej Java lerne. Ich hoffe, das ist nicht ganz so schlimm.

Java:
class SWBild
{
  // 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();
      }
  }

/**
  * Zeichnet das Bild in _bilddaten neu
  */
  private void zeichneBild()
  {
      _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);
      _leinwand.sichtbarMachen();

      zeichneBild();
  }

/**
  * Dieses Bild vertikal spiegeln.
  */
      public void vertikalSpiegeln()
      {
      for (int y = 0; y < _hoehe; y++)
      {
          for (int x = 0; x < _breite/2; x++)
          {
              short tmp = _bilddaten[y][x];
              _bilddaten[y][x] = (short) _bilddaten[_hoehe-y-1][_breite-x-1];
              _bilddaten[_hoehe-y-1][_breite-x-1] = tmp;
          }
     }
  zeichneBild();
  }
}
 
Zuletzt bearbeitet von einem Moderator:
Eine Sache für dich:
Beim speichern von Farbwerten in PixelArrays solltest du 1-Dimensionale Arrays verwenden und nicht 2-Dimensionale. (Soll sehr viel schneller sein und man kommt nicht mit klammern durcheinander.)

Du musst nur folgendes beachten:
- Die Größe des Arrays ist breite * hoehe
- Farbwert von (x|y) ist: array[x + y * breite]
- Wenn du x und y durch irgendwas veränderst (zum Beispiel immer x + (irgendeine Variable)) dann vergiss die Klammern nicht

Besonders falls du Simulationen oder irgendwas schnelles Grafisches machst, ist dieser weg schneller^^
 

Zurück
Oben