QPixmap in Grayscale

Alles rund um die Programmierung mit Qt
Antworten
c++coder
Beiträge: 47
Registriert: 11. Juli 2005 00:20
Kontaktdaten:

QPixmap in Grayscale

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Warum so umständlich wenn es auch per QImage::convertToFormat() gibt?

http://doc.trolltech.com/4.1/qt.html#Im ... nFlag-enum
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
c++coder
Beiträge: 47
Registriert: 11. Juli 2005 00:20
Kontaktdaten:

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

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 »

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 »

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 »

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 »

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 »

aso ja;)

Code: Alles auswählen

QPixmap myPixmap = QPixmap::fromImage(img_gray);
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 »

warum klappt das nicht? hmmm
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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));
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Antworten