Probleme mit QImage
Verfasst: 4. Mai 2008 19:22
Erstmal hallo leute. Ich hab mir für meine Webcam unter Linux einen kleinen Wrapper geschrieben, mit dem ich jetzt Bilder im PNM Format, genaugenommen das RGB24 aufnehmen kann. Jedoch tauen bei mir da jetzt zwei Probleme auf.
Erstaml zum ersten. Also da QT ja RGB24 nicht unterstützt wollte ich das ganze Pixelweise auslesen und in eine QImage Variable wieder hineinspeichern. Dazu habe ich folgende funktion geschrieben:
Und Verwenden tue ich es folgendermaßen
Leider sind die Bilder danach SEHR seltsam verzerrt. Ich weiß aber das es nicht an der methode grab_picture liegt, weil wenn ich die Daten in eine Datei Packe, kann ich das BIld normal öffnen. Fällt hier vielleicht irgendjemandem etwas auf was ich falsch gemacht habe?
Und dann wäre da auch noch das zweite Problem.
Die einzelnen Bilder möchte ich natürlich hintereinander abspielen.
Zu diesem Zweck verwende ich folgende Schleife im Konstruktor des Widgets das das Label mit dem Bild enthält:
Dies geschieht also noch vor dem aufruft von "return app.exec" in der main.cpp falls das irgendeine Bedeutung haben sollte. Jedenfalls erscheint das Label mitsamt Bild erst, wenn ich die Schleife verlasse(ich habe die bedingung testweise auf 100 durchläufe gestellt). Warum ist das so? Und was kann man dagegen tun?
Ich hoffe irgendjemand kann mir hier noch weiterhelfen.
MfG scarfish
Erstaml zum ersten. Also da QT ja RGB24 nicht unterstützt wollte ich das ganze Pixelweise auslesen und in eine QImage Variable wieder hineinspeichern. Dazu habe ich folgende funktion geschrieben:
Code: Alles auswählen
void draw_picture(char* source, int breite, int hoehe, QImage& target){
QRgb pixel;
for(int x=0;x<breite;x++){
for(int y=0;y<hoehe;y++){
pixel=qRgb(source[0],source[1],source[2]);
target.setPixel(x,y,pixel);
source+=3;
}
}
}Code: Alles auswählen
QImage img(320,240,QImage::Format_RGB32);
char* picture;
picture = (char*)cam->grab_picture();//gibt bild von der WebCam zurück
draw_picture(picture,320,240,img);
label->setPixmap(QPixmap::fromImage(img));
Und dann wäre da auch noch das zweite Problem.
Die einzelnen Bilder möchte ich natürlich hintereinander abspielen.
Zu diesem Zweck verwende ich folgende Schleife im Konstruktor des Widgets das das Label mit dem Bild enthält:
Code: Alles auswählen
while(true){
picture = (char*)cam->grab_picture();
draw_picture(picture,320,240,img);
label->setPixmap(QPixmap::fromImage(img));
label->show();
}Ich hoffe irgendjemand kann mir hier noch weiterhelfen.
MfG scarfish