Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Qt: QImage + gamma

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.06.2004
    Ort
    mainaschaff
    Beiträge
    109

    Qt: QImage + gamma

    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:
    Code:
    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

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.06.2004
    Ort
    mainaschaff
    Beiträge
    109
    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

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von chapaev
    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

    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2004
    Ort
    mainaschaff
    Beiträge
    109
    Hi Leute,

    Ich habe versucht gamma korektur mit QBuffer machen, leider klappt das nicht:
    Code:
    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

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Vielleicht wird die Gamma Korrektur nur beim Laden gemacht?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    05.06.2004
    Ort
    mainaschaff
    Beiträge
    109
    Daran habe ich auch schon gedacht, leider ist es nciht der Fall

    Code:
    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.
    Das verstehe ich nciht, scheint doch alles in "Ordnung" zu sein....

    MfG

    chapaev

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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 )

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •