# Bilder über Socket



## Lazybone (11. Feb 2008)

Tag,

ich habe einen BufferedReader und BufferedWriter mit dem ich Daten zwischen zwei Geräten per Socket austausche. Nun lade ich mit File 

```
file = new File("/home/info/Desktop/Bildschirmfoto-4.png");
BufferedImage bild = ImageIO.read(file.getAbsoluteFile());
```
Ein Bild was ich gerne verschicken möchte und beim Endgerät wieder als Datei speichere. Wie stelle ich dies an?

Gruß
Lazybone


----------



## HoaX (11. Feb 2008)

indem du das bild wieder in irgendeiner weise serialisierst und dann sendest ... am besten ohne writer sondern direkt per stream, außer deine serialiserte form besteht wirklich nur aus textzeichen ...


----------



## 0x7F800000 (19. Feb 2008)

Ich bin heute selbst darauf gestoßen, dass Bilder in Java anscheinend nicht serealisierbar sind. Integer-Arrays sind es schon. Ich habe deswegen auf das Bild den PixelGrabber (java.awt.image.* oder irgendwo dort wenn ich mich nicht irre) losgelassen, dadurch ein IntegerArray mit reinen Farbwerten erhalten. Nun musst du nur die Bildabmessungen und die Farbwerte in irgendeinem Serealisierbaren dings abspeichern, etwa:


```
private static class ImageData implements Serializable{
	public int w,h;
	public int[] pixels;
	
	public ImageData(Image img){
		JLabel obs=new JLabel("");
		w=img.getWidth(obs);
		h=img.getHeight(obs);
		PixelGrabber grabber=new PixelGrabber(img,0,0,w,h,pixels,0,w);
		try{
			grabber.grabPixels();
		}catch(Exception e){
			System.out.println("ImageData: <<create>> couldnt grab");
		}
	}
}
```

Dann über ein ObjectStream irgendwohin rüberschicken:


```
ObjectOutputStream out=new ObjectOutputStream(/*das musst du selbst besser wissen*/);
out.writeObject(new ImageData(myImage));
```

und dann auf der Anderen seite wieder ein bild daraus zusammenbasteln ( siehe zB 14.11.3 in der Insel) 
irgendwie mit

```
Image img=MyObserverComponent.createImage(new MemoryImageSource(w,h,pixels,0,w));
```

und schlieslich mit ImageIO irgendwo abspeichern...
Das dürfte gehen^^ 
Kann möglicherweise auch die umständlichste lösung sein, kP, bin selbst noob in java^^


----------



## 0x7F800000 (19. Feb 2008)

Aber aufpassen, das bild wird nicht geladen, solange es nirgendwo gezeichnet wird (da versucht java das denken für den menschen zu übernehmen, supertoll^^) also musst du noch einen mediatracker drauf los lassen...


----------



## HoaX (20. Feb 2008)

ein png oder jpg oder gif oder ... wäre eine serialisierte art eines bildes, lässt sich schön mittels ImageIO erzeugen.

ob jetzt ein bild gemalt wird oder du darauf zugreifst ist egal. das laden geschieht (manchmal) asynchron und hat nichts damit zu tun wann du darauf zugreifst.


----------

