PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Qt: QImage + gamma



chapaev
15-04-2005, 22:49
Hi Leute,

Ich will mit QImage gamma corection durchführen. Dabei muss die QLabel das direckt anzeigen. Daher das QImage so eine Option nciht besitzt (bzw kenne ich keinen) habe ich stattessen QImageIO genommen und versucht Gamma direckt zu ändern:

void gammaDlg::init()
{
QImage img("test.jpg");
QImageIO iio;

iio.setImage( img );
iio.setGamma( 1000.0 );

image = iio.image();
QPixmap pixmap("test.jpg");
newImage->setPixmap(image); // newImage = QLabel
}
Leider wird das Bild genau so angezeigt wie die vorher war (original). Anscheint muss ich das Bild erst speichern und dann laden damit es klappt. Diese Methode ist aber sehr langsam und aufwändig.

Deshalb wollte ich fragen ob es eine andere möglichkeit gibt, Gamma Korrektur zu machen?

Danke im Voraus

chapaev

anda_skoa
16-04-2005, 14:58
Du mußt ja nicht in eine Datei speichern, ein QBuffer geht sicher auch als IODevice.

Man könnte auch das Image direkt bearbeiten, an die Pixeldaten kommt man ja auf verschiedene Arten heran.

Oder man nimmt die Pixeldaten und übergibt sie an eine Bobliothek für Bildverarbeitung, wie zum Beispiel ImageMagick.

Ciao,
_

chapaev
16-04-2005, 23:54
Du mußt ja nicht in eine Datei speichern, ein QBuffer geht sicher auch als IODevice.Hmm... Sowas ähnliches habe ich irgend wo gesehen. Prinzip ist das selbe wie beim speichern, nur ohne Datei. Leider weiss ich nicht mehr wo ich das gesehen habe.. :(


Man könnte auch das Image direkt bearbeiten, an die Pixeldaten kommt man ja auf verschiedene Arten heran. Klingt gut, leider habe ich kaum erfahrung mit Image bearbeitung. Kannst du mir ein Beispiel zeigen, bzw sagen wo ich suchen soll?

Oder man nimmt die Pixeldaten und übergibt sie an eine Bobliothek für Bildverarbeitung, wie zum Beispiel ImageMagick.Genau dass will ich vermeiden! :)

Danke für den Antwort

chapae

anda_skoa
17-04-2005, 18:53
Hmm... Sowas ähnliches habe ich irgend wo gesehen. Prinzip ist das selbe wie beim speichern, nur ohne Datei. Leider weiss ich nicht mehr wo ich das gesehen habe.. :(

Vermutlich in der Qt Doku :D

Einfach mal in der Doku zu QImageIO den Link zu QIODevice verfolgen und dort nachsehen, welche Subklassen das hat.
Kleiner Zusatzhinweis: in meinem anderen Posting steht der Klassenname auch drin.



Klingt gut, leider habe ich kaum erfahrung mit Image bearbeitung. Kannst du mir ein Beispiel zeigen, bzw sagen wo ich suchen soll?

Hmm, leider nein.
Bildverarbeitung ist nicht meine Domäne.

Ciao,
_

chapaev
21-04-2005, 19:59
Hi Leute,

Ich habe versucht gamma korektur mit QBuffer machen, leider klappt das nicht:

void gammaDlg::reloadImage()
{
double g = 500;
QImage newImg;
QImageIO qio;
QBuffer fr;
fr.open( IO_ReadWrite );
QImage img = image;
qio.setImage( img );
qio.setFormat( "JPEG" );
qio.setGamma( g );
qio.setIODevice( &fr );
if ( qio.write() )
{
fr.flush();
newImg = QImage( fr.buffer() );
}
fr.close();
qio.setIODevice( NULL );
qio.setGamma( 1000 );
qio.setFileName( QDir::homeDirPath() + "/tmp.jpg" );
qio.write();
QByteArray to = fr.buffer();
int r = to.size();
showImage( newImg );
}
Sowie gespeicherte als auch angezeigte Datei, sind edentisch mit dem Original. :( Woran liegt das?

Danke im Voraus

chapaev

anda_skoa
21-04-2005, 20:29
Vielleicht wird die Gamma Korrektur nur beim Laden gemacht?

Ciao,
_

chapaev
21-04-2005, 22:29
Daran habe ich auch schon gedacht, leider ist es nciht der Fall :(


void gammaDlg::reloadImage()
{
QImage newImg;
QImageIO qio;
qio.setFormat( "JPEG" );
qio.setGamma( 1000 );
qio.setFileName( "test.jpg" );

if ( qio.read() )
{
newImg = qio.image();
showImage( newImg );
}
else
{
QMessageBox::critical(0, "ERRROR", "Can't load image");
}
}
Das Bild wird geladen, aber es verändert sich nichts. :confused:
Das verstehe ich nciht, scheint doch alles in "Ordnung" zu sein....

MfG

chapaev

anda_skoa
22-04-2005, 11:22
Keine Ahnung, vielleicht geht das nur bei betimmten Formaten.

Am besten du suchst dir ein Qt basiertes Programm, das sowas macht und borgst dir dort den Code (kompatible Lizenz vorausgesetzt :D )

Ciao,
_