# Java Bildbearbeitung



## Kenan89 (23. Mai 2012)

Hi,

ich habe ein Haufen Bilder, die immer nach dem gleichen Muster bearbeitet werden müssen.
Irgendwo wird ein Bildausschnitt entfernt und wo anders hinzugefügt.
Kann ich das mit einem Konsolenprogramm erledigen?
Ich weiss bis jetzt nur, wie man ein Image an BufferdImage übergibt, Konsoleneingaben empfängt(BufferedReader,System.in,...) und wie man überprüft, ob das Bild existiert oder nicht.
Ich habe jetzt das Bild, welches in der Konsole eingegeben wurde an BufferedImage übergeben. Kann ich das jetzt intern bearbeiten lassen von Java, ohne GUI?


Gibts dafür extra libraries?

EDIT:

```
public class Exe {

	private BufferedReader br;
	private BufferedImage bImg;
	private String dateiname;
	private boolean schleife = true;
	private File f;
	
	public static void main(String[] args){
		new Exe();
	}
	
	public Exe(){
	
		try{
			while(schleife){
				showDialog();	
			}
		}
		catch(IOException e){
			e.printStackTrace();
			System.out.println("Ein Fehler ist aufgetreten...");
		}
		
	}
	
	private void showDialog() throws IOException{
		System.out.println("Bitte Dateinamen eingeben, mit Endung.");
		br = new BufferedReader(new InputStreamReader(System.in));
		dateiname = br.readLine();
		f = new File(dateiname);
	
		if(f.exists()){
			loadImg();
		}
		else{
			System.out.println("Eine solche Datei ist nicht vorhanden.");
		}
	
	}
	
	private void loadImg(){
		bImg = ImageIO.read(f);
		Graphics g = bImg.createGraphics();
		g.create(0, 0, 50, 50);
		
		ImageIO.write(
				, 
				"png", 
				new File("./")
		);
	}
}
```

Hier ist der Quellcode. Zum Testen schneide ich ersteinmal nur ein Teil des Bildes und möchte es abspeichern. Klappt nicht.
g.create definiert doch einen Image Bereich. Diesen Bereich müsste ich doch irgendwie einem BufferedImage zuweisen können, um es dann abspeichern zu können.


----------



## HimBromBeere (23. Mai 2012)

> Kann ich das jetzt intern bearbeiten lassen von Java, ohne GUI?


Klar, kannst du das, nur du wirst von deinen Änderungen halt nichts sehen können.



> Irgendwo wird ein Bildausschnitt entfernt und wo anders hinzugefügt.


Meinst du innerhalb ein und des selben Bildes oder in zwei verschiedenen?



> ```
> g.create(0, 0, 50, 50);
> ```


Du musst natürlich auch irgendwann mal in deinen neu erstellten GraphikKontext zeichnen... schau dir dazu mal das hier an.


----------



## Kenan89 (23. Mai 2012)

Also ich habe ein Bild xy.png.
Darin ist oben ein Auto,
in der Mitte ein Haus,
und unten eine Katze zu sehen.
Jetzt will ich die Positionen der Katze und des Autos
vertauschen.
Dafür muss ich ja beide auschneiden und entsprechen einfügen.


----------



## Kenan89 (23. Mai 2012)

Jetzt versuche ich es auf diese Weise.


```
Graphics2D g2D = bufferedImg.createGraphics();
Graphics2D cut1 = g2D;
cut1.clipRect(0,0, 50, 50);
Graphics2D cut2 = g2D;
cut2.clipRect(0,50, 50, 50);
//jetzt irgendwie in g2D die beiden Graphics(cut1 und cut2) draufkopieren
```

Leider ohne Erfolg. Freu mich auf Hilfe.


----------



## HimBromBeere (23. Mai 2012)

Hast du dir mal meinen Link durchgelesen? Da ist im sechsten Beitrag beschieben, was du zu tun hast.


----------



## Marco13 (23. Mai 2012)

Das mit dem CLipRect und so ist wohl Unfug. Mit
Image subImage = image.getSubImage(x,y,w,h)
kann man einen Teil des Bildes "rauskopieren", und es mit

```
Graphics2D g = image.createGraphics();
g.drawImage(subImage, xx,yy,null);
g.dispose();
```
an eine andere Stelle malen.


----------

