udp -> bytearray -> image -> ausgabe via frame

Hallo,

ich bin was Java angeht ein relativer Neuling. Ich hatte ein wenig Erfahrungen mit Processing gesammelt, was mir aber für den vorliegenden Fall nicht genügt.

Mein Vorhaben besteht im Prinzip darin, über ein UDP-Socket ein Bytearray zu empfangen, dieses in ein Bild umzuwandeln und dieses Bild dann vorzugsweise auf einem JFrame auszugeben. Hinzu kommt, dass sich dieser Vorgang bis zu 30 Mal pro Sekunde wiederholen wird.

Bis zum Bytearray bekomme ich das alles alleine hin, aber es gibt eine Stelle, an der ich grade etwas verzweifel. Wie müsste die paint-Methode ungefähr aussehen, um in ein JFrame immer wieder ein neues Bild zu zeichnen? :bahnhof:

Vielen Dank im Voraus für Eure Antworten und Mühen.
 
Ich würd mir das (jeweils aktuellste) Bild irgendwo in einer Variable speichern und dann [c]repaint()[/c] aufrufen. Deine Implementation von [c]paint(...)[/code] verwendet dann die vorhin erwähnte Variable.
 
Hi,

auch wenn du ein byte[] bekommt, konvertiere das mal in einen int[], sodass alle negativen-byte-einträge positiv werden. Sprich die RGB werte die du im byte[] mit -128 bis +127 dargestellt hast, sollen im int[] von 0 bis 255 dargestellt werden.

Ich gehe davon aus dass du dein int[] "pixels" nennst:

Java:
		int[] pixels = /*dein array*/;
		
                /* natürlich brauchst du auch width und height von dem bild */
		BufferedImage bim = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		bim.getRaster().setPixels(0, 0, width, height, pixels);
		
		g.drawImage(bim, 0, 0, null);

hoffe das hilft dir weiter.

Lg
 
Ja, das bringt mich auf jeden Fall schonmal gedanklich weiter. Vielen Dank für den Tipp mit dem int[]..
Dazu allerdings noch eine kurze Frage: Wie werden die Indezies denn in Pixel gewandelt? Ich frage deshalb, weil pixels in meinem Fall 10000 Indezies beinhaltet, ich bei dem Versuch 100*100 Pixel daraus zu generieren allerdings eine ArrayOutOfBounds-Exception bekomme..

Java:
BufferedImage bim = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
			bim.getRaster().setPixels(0, 0, 100, 100, pixels);
			g.drawImage(bim, 0, 0, null);
 
fast - du hast natürlich

width * height * 3 pixels

wenn du RGB hast (was bei meinem post der fall war, wegen der Zeile "BufferedImage.TYPE_INT_RGB")
Wenn du ARGB haben willst, such bitte einfach nach der entsprechenden Konstante 🙂 (sollte aber natürlich auch ohne probleme gehen).

Lg
 

Neue Themen


Zurück
Oben