Ich habe eine JFrame-GUI, die Rohvideostream live von einer LAN-verbundenen Kamera aufnimmt. Ich setze den RBG-Wert (die Kamera streamt die Pixelwerte, aber auch nur die weißen und schwarzen Farben) für jede Koordinate in BufferedImage (img1) und zeichne das Bild auf einem standardmäßigen erweiterten Java-Canvas (MyCanvas canvas1).Warum wird die höhere Auflösung von BufferedImage in Canvas eingeschlossen und komprimiert?
Code-Snippet zum Zeichnen in Gewindeumgebung, die bis auf die Auflösung 1280x960 funktioniert.
while (true) {
synchronized (this) {
if (shouldrun == false) {
System.out.println("Quiting Thread.....\n");
break;
}
}
if (in.read(ch) < 0) {
break;
}
/* Mono */
pixelvalue = 0x00000000 | (ch[0] << 16)
| (ch[0] << 8) | (ch[0]);
img1.setRGB(x, y, pixelvalue);
x++;
//resWidth = 1280
if (x >= resWidth) {
x = 0;
y++;
}
framedata[pixelcount] = (byte) ch[0];
pixelcount++;
//resHeight = 960
if (pixelcount >= resWidth * resHeight) {
System.out.println("pixelcount = " + pixelcount);
if (record == true) {
System.out.println("Recording Frame...");
if (fo != null) {
fo.write(framedata);
}
}
synchronized (canvas1) {
canvas1.DrawImage(img1);
canvas1.repaint();
}
Thread.sleep(33);
pixelcount = 0;
x = 0;
y = 0;
}
}
-Code-Snippet Canvas-Klasse für canvas1 Objekt:
class MyCanvas extends Canvas {
int startAngle = 0;
int extent = 45;
boolean filled = false;
Image disimg = null;
public void DrawImage(Image img) {
disimg = img;
}
public void paint(Graphics g) {
g.setColor(Color.pink);
g.drawImage(disimg, 0, 0, null);
}
public void redraw(boolean filled, int start, int extent) {
this.filled = filled;
this.startAngle = start;
this.extent = extent;
repaint();
}
}
Die Java-GUI-Anwendung erfolgreich in der Lage war, das Bild in 640x480 (resWidth = 640 & resHeight = 480) Auflösung Bild von der Kamera zu ziehen
Ich setze einfach die Variable resWidth auf 640 und die Variable resHeight auf 480 für Koordinateninkremente und die Canvas-Dimension.
jedoch, wenn dabei das gleiche für 1280x960 Auflösung das Ergebnis zeigt, 2 doppelte Bilder und komprimiert/zerquetscht vertikal:
Warum sollte dies geschehen? Kann ich nicht einfach die Variablen Breite und Höhe im Code variieren? Könnte es das Jpanel-Layout sein? Oder wie die Kamera die Pixelwerte in dieser Auflösung streamt?
Wir haben keine Kristallkugel in den Code zu suchen. Posten Sie hier eine [mcve], die das Problem reproduziert, so dass die Leute nachforschen können. –
Sorry Code hinzugefügt, hoffe, dass das hilft, eine praktikable Lösung zu verstehen – Qwerty