Alles rund um die Programmierung mit Qt
c++coder
Beiträge: 47 Registriert: 11. Juli 2005 00:20
Kontaktdaten:
Beitrag
von c++coder » 15. Juli 2006 19:15
hi, wie kann ich ein QPixmap in Grayscale umwandeln....ich brauch QPixmap damit ich es auf dem label anzeigen kann!
warum funktioniert das hier so nicht?
Code: Alles auswählen
void Qt_ImageProcessing::Grayscale()
{
QImage img = pixmap.toImage();
QImage img_gray(img.width(), img.height(), QImage::Format_RGB32);
for (int y = 0; y < img.height(); ++y) {
for (int x = 0; x < img.width(); ++x) {
int pixel = img.pixel(x, y);
int gray = qGray(pixel);
int alpha = qAlpha(pixel);
img_gray.setPixel(x, y, qRgba(gray, gray, gray, alpha));
}
}
QPixmap myPixmap(img.width(), img.height());
myPixmap.fromImage(img_gray);
ui.label->setPixmap(myPixmap);
}
cu
c++coder
Beiträge: 47 Registriert: 11. Juli 2005 00:20
Kontaktdaten:
Beitrag
von c++coder » 15. Juli 2006 21:14
hab ich vorher auch probiert ohne erfolg;/
Code: Alles auswählen
QImage img_gray = pixmap.toImage().convertToFormat(QImage::Format_Indexed8);
QPixmap myPixmap;
myPixmap.fromImage(img_gray);
ui.label->setPixmap(myPixmap);
warum läuft das obere beispiel ohne convertToFormat auch nicht?
cu
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 15. Juli 2006 22:31
Was heisst 'funktioniert nicht' ?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
c++coder
Beiträge: 47 Registriert: 11. Juli 2005 00:20
Kontaktdaten:
Beitrag
von c++coder » 15. Juli 2006 22:40
dh ich sehe auf meinem label kein graues bild;/ bzw seh gar nichts...
farbbild lies sich aber anzeigen....
hm
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 15. Juli 2006 22:53
Dann speichere das Image mal als png oder was auch immer und schaue ob es dort korrekt ist.
Ausserdem ist QImage::Format_Indexed8 falsch (zumindest wenn man grayscale will...) und Du verwendest auch
QPixmap::fromImage () nicht korrekt
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
c++coder
Beiträge: 47 Registriert: 11. Juli 2005 00:20
Kontaktdaten:
Beitrag
von c++coder » 15. Juli 2006 23:28
du meinen so?
Code: Alles auswählen
QImage img_gray = pixmap.toImage().convertToFormat(QImage::Format_RGB32, Qt::MonoOnly);
will QPixmap ein 32 bit image haben und grayscale ist nur 8 bit oder?
cu
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 16. Juli 2006 00:25
Qt::MonoOnly bei 256 Farben ist richtig. Jetzt sollte nur noch die statische Funktion korrekt benutzt werden...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
c++coder
Beiträge: 47 Registriert: 11. Juli 2005 00:20
Kontaktdaten:
Beitrag
von c++coder » 16. Juli 2006 00:31
aso ja;)
hab das bild mal gespeichert, seh jetzt wieder ein farbbild, anzeigen tuts auch ein farbbild;/ uff
hm..
c++coder
Beiträge: 47 Registriert: 11. Juli 2005 00:20
Kontaktdaten:
Beitrag
von c++coder » 21. Juli 2006 15:58
warum klappt das nicht? hmmm
Volker
Beiträge: 343 Registriert: 30. Juni 2005 05:27
Beitrag
von Volker » 5. August 2006 01:08
Nicht die performanteste Lösung aber für Echtzeit-Bildverarbeitung is QT eh nicht geeignet!
Code: Alles auswählen
// 32bit Bild laden woher auch immer
QImage img = ...;
// Graustufen Bild erstellen, mit selben Dimensionen aber Format Indexed8
QImage img_gray(img.width(), img.height(), QImage::Format_Indexed8);
// Colortable erstellen für Graustufen
QVector<QRgb> grayscales;
for (int i=0; i<256; ++i)
grayscales.push_back(qRgb(i,i,i));
/
/ colortable dem graustufen bild zuweisen
img_gray.setColorTable(grayscales);
// farben übertragen
for (int y=0; y<img.height(); ++y)
for (int x=0; x<img.width(); ++x)
{
// farbwert holen
QRgb rgb = img.pixel(x,y);
// umrechnen in graustufe
unsigned char gray = 0.299*qRed(rgb) + 0.587*qGreen(rgb) + 0.114*qBlue(rgb);
// dem graustufen bild den wert zuweisen
img_gray.setPixel(x,y, gray);
}
// dem entsprechenden label ein Pixmap aus Graustufen Bild zuweisen
label->setIcon(QPixmap::fromImage(img_gray));
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel