Hey,
Ich bin gerade dabei an einem Projekt weiterzuarbeiten, und stehe nun vor einem Problem.. und das sieht folgendermaßen aus:
1) Ich habe ein BufferedImage dessen RGBA Daten ich in ein Int-Array oder String packen möchte
2) Das ganze dauert aber pro Bild (ca 200*200px) schon fast ne halbe Minute.. und das ist ziemlich unbrauchbar so.
Gibt es da eine elegantere Möglichkeit die RGBA Wertes eines ganzen BufferedImage in ein Array / String zu packen (vllt auf einen Schlag ohne for-Schleife)?
Ich habe noch nicht viel Erfahrung in Java, und mache das deshalb zur Zeit so:
Code:
screenRect = new Rectangle(0, 0, 200, 200);
capture = new Robot().createScreenCapture(screenRect);
int[] rgb = ((DataBufferInt)capture.getRaster().getDataBuffer()).getData();
String data="";
for(int x=0;x<rgb.length();x++)
{
Color c = new Color(rgb[x]);
data += c.getRed()+","+c.getGreen()+","+c.getBlue()+","+c.getAlpha()+",";
}
Jedoch scheint das nicht wirklich ideal zu sein, vorallem da ich in meinem Projekt pro Bild nur max ca 1/2 bis 1 Sekunde brauchen darf damit es nutzbar ist.
Rauskommen soll am Ende dann sowas wie hier zum Beispiel:
Code:
255,0,124,0,12,142, [...] ,255,0,120
Quasi ein ziemlich langes String oder Array mit den RGBA Daten.
Hat da jemand Tipps oder Ideen wie ich das ganze anders lösen könnte? Ich denke das die Abfragen von getBlue, getRed, getAlpha usw der entscheidende Faktor sind die das ganze langsam machen - würde das ganze schneller laufen wenn ich das ganze Manuell berechnen lasse ohne das ich diese Funktionen aufrufe? Oder würde das auf das selbe hinauslaufen?
Ich kenne es von Javascript Canvas das man hier direkt ein Uint8ClampedArray hat auf das man zugreifen kann... da ist die Geschwindigkeit dann auch ziemlich schnell und man kann sogar bei Webcam-Feeds live die Pixel manipulieren ohne Probleme... nur in Java scheint der Zugriff auf die Daten enorm langsam zu sein - weshalb auch immer (mache ich etwas falsch?).
Kann mir da jemand helfen?^^
Wäre tierisch genial
grüße