Seite 1 von 1
QPixmap in Grayscale
Verfasst: 15. Juli 2006 19:15
von c++coder
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
Verfasst: 15. Juli 2006 20:40
von Christian81
Warum so umständlich wenn es auch per QImage::convertToFormat() gibt?
http://doc.trolltech.com/4.1/qt.html#Im ... nFlag-enum
Verfasst: 15. Juli 2006 21:14
von c++coder
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
Verfasst: 15. Juli 2006 22:31
von Christian81
Was heisst 'funktioniert nicht' ?
Verfasst: 15. Juli 2006 22:40
von c++coder
dh ich sehe auf meinem label kein graues bild;/ bzw seh gar nichts...
farbbild lies sich aber anzeigen....
hm
Verfasst: 15. Juli 2006 22:53
von Christian81
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
Verfasst: 15. Juli 2006 23:28
von c++coder
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
Verfasst: 16. Juli 2006 00:25
von Christian81
Qt::MonoOnly bei 256 Farben ist richtig. Jetzt sollte nur noch die statische Funktion korrekt benutzt werden...
Verfasst: 16. Juli 2006 00:31
von c++coder
aso ja;)
hab das bild mal gespeichert, seh jetzt wieder ein farbbild, anzeigen tuts auch ein farbbild;/ uff
hm..
Verfasst: 21. Juli 2006 15:58
von c++coder
warum klappt das nicht? hmmm
Verfasst: 5. August 2006 01:08
von Volker
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));