raw mono8 grayscale bild in QPicture/Pixmap konvertieren
raw mono8 grayscale bild in QPicture/Pixmap konvertieren
Hallo Leute,
der Titel des threads sagt schon alles, ich hab ein ARRAY in dem ein grayscale 8 bit bild steckt, und ich möchte das umwandeln und auf der oberfläche anzeigen auf einem label1.
hat jemand ahnung ob es dafür schon fertige konvertierungsfunktionen gibt? oder wie ich das vll sogar mit QT selbst schon hinbekomme
mfg
marvin
der Titel des threads sagt schon alles, ich hab ein ARRAY in dem ein grayscale 8 bit bild steckt, und ich möchte das umwandeln und auf der oberfläche anzeigen auf einem label1.
hat jemand ahnung ob es dafür schon fertige konvertierungsfunktionen gibt? oder wie ich das vll sogar mit QT selbst schon hinbekomme
mfg
marvin
Code: Alles auswählen
QImage ( const uchar * data, int width, int height, Format format )
Code: Alles auswählen
QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )
Bau dir ein neues Array das die 3-fache Länge hat. Dann kannst du das RGB Format nutzen. Rot Grün und Blau haben den selben Wert, so bleibt es dann auch ein Graubild.
-
Curtis Newton
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39
Mithilfe der Suchfunktion habe ich diesen Thread gefunden.
http://qtforum.de/forum/viewtopic.php?t ... t=indexed8
Das könnte Dir weiterhelfen...
http://qtforum.de/forum/viewtopic.php?t ... t=indexed8
Das könnte Dir weiterhelfen...
Linux, das längste Text-Adventure aller Zeiten
-
Curtis Newton
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39
Hallo
folgenden Code habe ich probiert
Im Zeiger x sind die Bilddaten. Die Funktion hängt sich aber jedesmal beim debuggen auf.
Was wohl fehlt ist der Übergabeparamter int bytesPerLine //QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )//
Leider kann ich mit bytesPerLine nichts anfangen bzw. weiß nicht was die Kamera da liefert und habe dafür mal den Dummywert 200 übergeben. Dann läufts zumindest ohne abzustürzen aber ein Bild bekomm ich immer noch nicht angezeigt.
Ist der Code soweit korrekt? Und wie kann ich das Problem mit den bytesPerLine umgegehen?
Mfg
folgenden Code habe ich probiert
Code: Alles auswählen
void SSDR::showPicture(char *x)
{
QImage img((uchar*)x,656,494,QImage::Format_Indexed8);
QPixmap pix = QPixmap::fromImage(img);
ui->imagelabel->setPixmap(pix);
}
Was wohl fehlt ist der Übergabeparamter int bytesPerLine //QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )//
Leider kann ich mit bytesPerLine nichts anfangen bzw. weiß nicht was die Kamera da liefert und habe dafür mal den Dummywert 200 übergeben. Dann läufts zumindest ohne abzustürzen aber ein Bild bekomm ich immer noch nicht angezeigt.
Ist der Code soweit korrekt? Und wie kann ich das Problem mit den bytesPerLine umgegehen?
Mfg
-
Curtis Newton
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39
Bytes per line gibt halt an, wieviel Bytes eine Bildzeile hat. Das musst Du schon in der SDK-Doku Deiner Kamera nachsehen. Wir haben hier keine Glaskugel. Wenn Du mal drüber nachdenkst, siehst Du, dass diese Angabe mindestens so gross sein muss wie die Anzahl der Pixel pro Zeile.marvin hat geschrieben:Hallo
folgenden Code habe ich probiert
Im Zeiger x sind die Bilddaten. Die Funktion hängt sich aber jedesmal beim debuggen auf.Code: Alles auswählen
void SSDR::showPicture(char *x) { QImage img((uchar*)x,656,494,QImage::Format_Indexed8); QPixmap pix = QPixmap::fromImage(img); ui->imagelabel->setPixmap(pix); }
Was wohl fehlt ist der Übergabeparamter int bytesPerLine //QImage ( uchar * data, int width, int height, int bytesPerLine, Format format )//
Leider kann ich mit bytesPerLine nichts anfangen bzw. weiß nicht was die Kamera da liefert und habe dafür mal den Dummywert 200 übergeben. Dann läufts zumindest ohne abzustürzen aber ein Bild bekomm ich immer noch nicht angezeigt.
Ist der Code soweit korrekt? Und wie kann ich das Problem mit den bytesPerLine umgegehen?
Mfg
Außerdem hast Du vergessen, die Palette zu setzen (siehe mein erstes Posting in diesem Thread).
C.
was müsste dann in setColorTable stehen wenn ein pixel ein byte is ? und halt graustufen hat ? 256 graustufen?
hmm mit vector templates net so die erfahrung aber ich nehm mal an ich muss für jedes pixel quasi einen tabellen eintrag machen oder?
stimmt der code sonst soweit? und bytesPerLine müsste ich dann irgendwie vom hersteller rauskriegen.
mfg
hmm mit vector templates net so die erfahrung aber ich nehm mal an ich muss für jedes pixel quasi einen tabellen eintrag machen oder?
stimmt der code sonst soweit? und bytesPerLine müsste ich dann irgendwie vom hersteller rauskriegen.
mfg
Ich hab keine Ahnung weil noch nie gemacht. Aber die Doku sagt es doch.
Vllt. so
Vllt. so
Code: Alles auswählen
QVector<QRgb> table(256);
for(int i = 0; i < table.size(); i++)
{
table[i] = qRgb ( i,i,i );
}
-
Curtis Newton
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39
Bitte? Das interessiert ja wohl, wenn man eine Schleife über das ganze Bild machen willst. Da ist die Unterscheidung width<->pitch essentiell.kater hat geschrieben:Im Zweifel ist Bytes per Line so groß wie die Breite des Bildes.
656 is auch ein Vielfaches von 4. Man macht intern den Speicher des Bildes größer, so dass dann die neue Breite ein Vielfaches von 4 ist. Aus Performancegründen. Aber in unserer heutigen Zeit interessiert es wohl niemand mehr.
C.