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;)

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..

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));