Hallo,
ich programmiere jetzt schon seit über 30 Jahren in dem Bereich digitales Video/digitale Fotografie vor allem im bereich embedded Systeme und unter C/C++.
Jetzt muss ich eine meiner Applikationen auf Java portieren und habe mich auch schon relativ weit eingelesen und eingearbeitet.
Trotzdem bleiben einige Fragen offen und auch die Suche bringt mich hier nicht so wirklich weiter. Deshalb hoffe, ich, dass man mich hier ein wenig in die richtige Richtung schubsen kann und mir Infos gibt wo ich weiterlesen kann.
Es geht darum, ein 16bit Graustufenbild möglichst performant anzuzeigen. Da man nur 8bit am Monitor anzeigen kann, müssen die Werte über einen Slider skalierbar sein (Nur Teile des Wertebereichs werden angezeigt). Deshalb eben auch die Performance, da das natürlich dann in Echtzeit (20FPS) gehen sollte.
Im Prnzip unter C eine Sache von 15minuten aber mit Java werden einem da jede Menge Stolpersteine in den Weg gelegt.
Das fängt damit an, dass ich die Pixeldaten in einem 16bit Array bekomme. Hier ist schon der erste Stolperstein, dass es unter Java kein uint16_t gibt. Ich muss also anscheinend jeden Wert erstmal aus einem byte[] buffer in ein int umrechnen wobei ich jedes Byte erstmal in ein int ändern muss um das Vorzeichen loszuwerden und dann die beiden Beides zu einem int zusammen addieren. Also quasi:
Das Ganze für 1MPixel ist nicht gerade elegant und schon gar nicht schnell....
Das muss doch auch schneller gehen oder?
Dann habe ich mein JFrame in das ich Zeichne. Alles schön und gut aber die einzige Möglichkeit da die Pixxel reinzuzeichnen die ich gefunden habe ist
ebenfalls extrem inperformant.
Bin ich irgendwie komplett auf dem Holzweg? Gibt es in Java nicht auch irgendwie die Möglichkeit direkt in einen Bildbuffer zu schreiben oder sowas?
Ich bin dankbar für jede Anregung
Claus
ich programmiere jetzt schon seit über 30 Jahren in dem Bereich digitales Video/digitale Fotografie vor allem im bereich embedded Systeme und unter C/C++.
Jetzt muss ich eine meiner Applikationen auf Java portieren und habe mich auch schon relativ weit eingelesen und eingearbeitet.
Trotzdem bleiben einige Fragen offen und auch die Suche bringt mich hier nicht so wirklich weiter. Deshalb hoffe, ich, dass man mich hier ein wenig in die richtige Richtung schubsen kann und mir Infos gibt wo ich weiterlesen kann.
Es geht darum, ein 16bit Graustufenbild möglichst performant anzuzeigen. Da man nur 8bit am Monitor anzeigen kann, müssen die Werte über einen Slider skalierbar sein (Nur Teile des Wertebereichs werden angezeigt). Deshalb eben auch die Performance, da das natürlich dann in Echtzeit (20FPS) gehen sollte.
Im Prnzip unter C eine Sache von 15minuten aber mit Java werden einem da jede Menge Stolpersteine in den Weg gelegt.
Das fängt damit an, dass ich die Pixeldaten in einem 16bit Array bekomme. Hier ist schon der erste Stolperstein, dass es unter Java kein uint16_t gibt. Ich muss also anscheinend jeden Wert erstmal aus einem byte[] buffer in ein int umrechnen wobei ich jedes Byte erstmal in ein int ändern muss um das Vorzeichen loszuwerden und dann die beiden Beides zu einem int zusammen addieren. Also quasi:
Java:
int lowByte=buffer{offest];
if(lowByte<0)
lowByte=256-lowByte;
int hightByte=buffer[offset+1];
igf(highByte<0)
highByte=256-highByte;
int value=lowByte+hightByte*256
Das Ganze für 1MPixel ist nicht gerade elegant und schon gar nicht schnell....
Das muss doch auch schneller gehen oder?
Dann habe ich mein JFrame in das ich Zeichne. Alles schön und gut aber die einzige Möglichkeit da die Pixxel reinzuzeichnen die ich gefunden habe ist
Java:
frame.setColor(Color(r,g,b));
frame.RectFill(x,y,1,1)
ebenfalls extrem inperformant.
Bin ich irgendwie komplett auf dem Holzweg? Gibt es in Java nicht auch irgendwie die Möglichkeit direkt in einen Bildbuffer zu schreiben oder sowas?
Ich bin dankbar für jede Anregung
Claus