# Bild als mehrdimesionaler Array



## Timee (16. Apr 2008)

Hallo ihr!

Ich hab schon viel gegogelt und in Foren gesucht, aber leider noch nichts brauchbares gefunden.
Ich möchte eine Bilddatei einlesen und als mehrdimensionalen Array speichern und damit dann weiterarbeiten. Im Array soll nur ein Wert für schwarz oder weiss (1 oder 0) gespeichert werden.
Das einlesen funktioniert wunderbar, außer das ich bei der Ausgabe in der Console die Arraywerte spiegelverkehrt und vertikal anstatt horizontal angezeigt werden (habe schon stundenlang rumprobiert, aber bekomm es einfach nicht hin das es richtig ist)

Hier der Code:

```
package picture_analyzer2;

import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;

public class PixelWorks 
{
	public static final double THREASHOLD = 3.; 
	
	private static BufferedImage img;
	
	public static void main(String... args) 
	{
		final JFileChooser chooser = new JFileChooser();
		chooser.showOpenDialog(null);
		final File pic = chooser.getSelectedFile();
		
		try 
		{
			img = ImageIO.read(
					new BufferedInputStream(
							new FileInputStream(pic)));
		} 
		catch (FileNotFoundException e) { e.printStackTrace();} 
		catch (IOException e) { e.printStackTrace(); }
		
		final Raster raster = img.getRaster();
		int maxX = raster.getWidth();
		int maxY = raster.getHeight();
		final int[][] values = new int[maxY][maxX];
		for(int x = 0; x < maxX; x++)
			for(int y = 0; y < maxY; y++)
				if (raster.getPixel(y, x, (double[])null)[0] <= THREASHOLD)
				{
				values[y][x] = 1;	
				}
				
		for(int[] n : values)
		{
			for(int i : n)
				System.out.print(i > 0 ? '#' : '.');
			
			System.out.println();
		}
			
		
	}
}
```


in der Konsole sieht das Bild (hier ein bitmap mit ein paar Buchstaben, hier ein "A") dann aber so aus:
......................................................................................................................
...................................................................####...............................................................................
.................................................................######...............................................................................
..............................................................#########...............................................................................
...........................................................#########..................................................................................
.........................................................########.....................................................................................
......................................................#########.......................................................................................
...................................................############.......................................................................................
................................................#########...###.......................................................................................
..............................................########......###.......................................................................................
...........................................########.........###.......................................................................................
.........................................#######............###.......................................................................................
.........................................####...............###.......................................................................................
.........................................####...............###.......................................................................................
.........................................#######............###.......................................................................................
..........................................#########.........###.......................................................................................
.............................................#########......###.......................................................................................
...............................................##########...###.......................................................................................
..................................................#########.###.......................................................................................
.....................................................##########.......................................................................................
.......................................................##########.....................................................................................
..........................................................##########..................................................................................
.............................................................#########................................................................................
................................................................#######...............................................................................
..................................................................#####...............................................................................
.....................................................................##...............................................................................
......................................................................................
Das ganze ist hier verzerrt. die proportionen stimmen in der Konsole überein.

Vielleicht könnte einer von euch mal kurz den Code überfliegen und mir eine kleine Hilfestellung geben, was ich falsch mache

Danke schon mal im vorraus 

Gruß,
Timee


----------



## SlaterB (16. Apr 2008)

horizontal/ vertikal:
statt erst ein Array n : values ganz auszugeben musst du von jedem Unter-Array den ersten Wert ausgeben, dann jeweils den zweiten usw.

spiegelverkehrt:
nicht vorne mit Index 0, 1, 2 anfangen, sondern rückwärts n-1, n-2 usw.

--------

oder die Ausgabe so lassen und die Speicherung umkehren, statt
values[y][x] = 1;
besser
values[x][y] = 1;
oder
values[x][maxY-y] = 1;

dazu natürlich
final int[][] values = new int[maxX][maxY]; 
statt
final int[][] values = new int[maxY][maxX]; 

das sind doch einfache Schritte, alles mal ausprobieren..


----------



## doctus (16. Apr 2008)

Die Verzerrung kann daran liegen, dass die verwendeten Zeichen nicht die selbe Breite beanspruchen. Die Raute hat grob geschätzt mindestens die doppelte Breite von dem Punkt.


----------



## Timee (17. Apr 2008)

@SlaterB: Danke für deine Hilfe, hab einfach an der falschen Stelle gesucht.

@doctus: das ist schon klar, in der Console stimm das seitenverhältnis. hier im forum ist eben keine konsolenschrift.


----------



## SlaterB (17. Apr 2008)

so ginge die Anzege hier (quote mein Posting um die nötigen Befehle zu sehen)


```
.......................................................................................
...................................................................####.........
.................................................................######.......
..............................................................#########...
...........................................................#########......
.........................................................########..........
......................................................#########...........
...................................................############.......
................................................#########...###.......
..............................................########......###........
...........................................########.........###........
.........................................#######............###.........
.........................................####...............###.............
.........................................####...............###.............
.........................................#######............###.........
..........................................#########.........###.......
.............................................#########......###.......
...............................................##########...###......
..................................................#########.###.......
.....................................................##########..........
.......................................................##########........
..........................................................##########.....
.............................................................#########....
................................................................#######......
..................................................................#####.........
.....................................................................##.............
......................................................................................
```


----------

