# Bild spiegeln



## Klingel89 (25. Mai 2010)

Hey, ich suche einen Algorithmus der mir die i Werte aus einem array_[j] anders herum ausgibt. Brauch das um ein Bild an der Vertikalachse zu Spiegeln. Danke! _


----------



## faetzminator (25. Mai 2010)

Hab gerade keine Klasse mit [c]reverse()[/c] gefunden, auch wenn ich behaupte, dass es diese gibt ???:L vielleicht in den Apache Commons!?
Auf alle Fälle musst du, je nach dem wie du das Bild drehen willst, einfach

```
reverse(array);
```
bzw.

```
for (T subArray : array) {
    reverse(subArray);
}
```
aufrufen.

Edit: [c]reverse()[/c] selbst implementiert könnte so aussehen (ungetestet) - hier mit einem int-Array:

```
public void reverse(int... array) {
    int len = array.length;
    for (int i = 0; i < len / 2; i++) {
        int tmp = array[len - i - 1];
        array[len - i - 1] = array[i];
        array[i] = tmp;
    }
}
```


----------



## Verjigorm (25. Mai 2010)

Klingel89 hat gesagt.:


> Hey, ich suche einen Algorithmus der mir die i Werte aus einem array_[j] anders herum ausgibt. Brauch das um ein Bild an der Vertikalachse zu Spiegeln. Danke! _


_

Eine einfache for-schleife, die andersrum zählt tuts doch_


----------



## Klingel89 (25. Mai 2010)

Habe es nun wie folgt gelöst...


```
public class BildManipulation3 {

  // Anfang Attribute
  // Ende Attribute


  // Anfang Methoden
  public static void main(final String[] args) {
  
    // eine grafik laden
    BildAnzeige t = new BildAnzeige("emu2.jpg");
    t.setGray();  // Bild auf graustufen setzen

    /*
     * zugriff auf das bild erhalten
     * in einer zelle steht der farbwert:
     *    bei farbbildern in der Codierung 0xRRGGBB
     *    bei graubildern im wertebereich von 0 .. 255
     */
    int[][] bild = t.getPicture();
    int[][] array =t.getPicture();                //Array für Konvolution
    for (int i=1;i<bild.length-1;i++){
      for (int j=1;j<bild[0].length-1;j++){
        int  farbwert=array[i][j] ;
               farbwert=255-farbwert;                       //Negativ erzeugen

         // HIER farbwert veraendern
         array[i][j]=farbwert;
      }
    }
  int len = array.length;
  int temp[][] = new int[len][array[0].length];
    for (int i = 0; i < len / 2; i++)
  {
      temp [i] = array[i];
      array[i] = array[len-i-1];
      array[len-i-1] = temp[i];
  }
    t.setVisible(true);                               // bild darstellen
  }


  // Ende Methoden
}
```

aber es ist auf den Kopf gespiegelt. ich wollt ja nur um die Vertikalachse.


----------



## faetzminator (25. Mai 2010)

Na dann machst du das ganze ein Level tiefer, also irgendwie so (ungetestet):

```
int len = array[0].length;
int temp[][] = new int[array.length][len];
for (int j = 0; j < array.length; j++) {
    for (int i = 0; i < len / 2; i++) {
        temp[j][i] = array[j][i];
        array[j][i] = array[j][len - i - 1];
        array[j][len - i - 1] = temp[j][i];
    }
}
```
Also einfach noch eine Schleife drum. Du solltest allerdings deine riesige Methode in mehrere aufteilen. Z.B. eine eigene Methode [c]reverse()[/c] schafft da Übersichtlichkeit.


----------



## Klingel89 (25. Mai 2010)

Danke, läuft bombe!


----------



## Blinda (9. Dez 2010)

Hey Ho...

ich bin neu ein blutiger Anfänger und würde gerne wissen, wieso bei mir 

int [][] bildarray = source.getPicture();

das nicht funktioniert...der compiler sagt symbol not found getPicture...muss ich dafür eine bestimmt bib laden oder wie funktioniert das?


----------



## Blinda (9. Dez 2010)

hey 

bitte gebt mir eine Antwort ich verzweifle


----------



## Andi_CH (10. Dez 2010)

Wie ist denn "source" deklariert?


----------



## Blinda (10. Dez 2010)

```
Picture source = new Picture(eingabe[0]);
```


----------



## Andi_CH (10. Dez 2010)

und was ist Picture?

Bitte! Ich möchte mich jetzt nicht einzeln durchfragen bis zu Starndardklassen.

Die Klasse Picture hat die Methode getPicture nicht ....


----------



## Blinda (10. Dez 2010)

Also wir sollen mit dem java.awt.color arbeiten und ein Bild einlesen..dieses Spiegeln und wieder zurück geben...das ist mein quellcode...


```
public class Mirrow2
{
	public static void main (String [] eingabe)
	{
		//String filename = eingabe [0];
		//Char x = Char.parseChar(eingabe[1]);
		Picture source = new Picture(eingabe[0]);
		int width = source.width();
		int height = source.height();
		
		int [][] bildarray = source.getImage();
		
		int len = bildarray.length;
		int temp[][] = new int [len][bildarray[0].length];
			for (int i = 0; i<len/2; i++)
			{
				temp [i] = bildarray[i];
				bildarray[i] = bildarray [len-i-1];
				bildarray[len-i-1] = temp [i];
			}
			source.show();
	}
}
```

welche methode könnte ich denn benutzen, um ein Bild in das Array zu laden? bzw die Pixelwerte zu übergeben? Danke...ich bin ganz blutiger anfänger ... sorry


----------



## Andi_CH (10. Dez 2010)

HALLOOOOOOOO! Was ist Picture für ein Klasse?
Wenn ich deinen code nehmen kennt mein Eclipse "Picture" nicht und schlägt auch keinen Import vor!


----------

