Anzeige:
Ergebnis 1 bis 7 von 7

Thema: [Qt] QPixmap skalieren?

  1. #1
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75

    [Qt] QPixmap skalieren?

    Hi,
    ich möchte eine QPixmap auf 100x100Pixel strecken (wenn das Bild kleiner sein sollte) bzw. schrumpfen (wenn das Bild größer sein sollte). Wie mache ich das? Mit resize(int x, int y) funktioniert es nicht.

    Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  2. #2
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825

    QPixmaps skalieren

    Zitat Zitat von Gartenzwerg
    Hi,
    ich möchte eine QPixmap auf 100x100Pixel strecken (wenn das Bild kleiner sein sollte) bzw. schrumpfen (wenn das Bild größer sein sollte). Wie mache ich das? Mit resize(int x, int y) funktioniert es nicht.
    Nein, der sträubt sich da etwas und tut gewiss nicht, was du willst.

    Erfolg hatte ich mit so was, indem ich ein Label in den gewünschten Maßen erzeugt habe, dieses als skalierbar gesetzt und dem das QPixmap verpasst habe. Hier ein Auszug aus dem Quelltext::

    QLabel* p_ue =new QLabel(p_spalte1);
    p_ue->setScaledContents(true);
    p_ue->resize(400,400);
    p_ue->setPixmap(QPixmap("./images/stein_0001.png"));

    ... und schon wird das arme Steinchen aufgeblasen
    Möglicherweise ist nicht mehr genug Platz, dann verkneift er sich manchmal das Neuskalieren in der einen oder anderen Richtung, und du musst das Label "zwingen".

  3. #3
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    Hi,
    danke deine Lösung funktioniert einwandfrei. Es gibt nur eine kleine Einschränkung: Wenn das QLabel in einem Layout steckt, akzeptiert es das resize anscheinend nicht und der Inhalt wird in Orginalgröße dargestellt. Kann man das irgendwie ändern?

    Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du kannst dir den Skalierungsfaktor bzw Faktoren berechnen und dann das Bild mit einem QPainter auf ein leeres 100x100 Pixmap zeichnen.
    Siehe dazu QPainter::scale()

    Oder in ein QImage umwandeln, scalen und zurück umwandeln.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von Gartenzwerg
    Hi,
    Einschränkung: Wenn das QLabel in einem Layout steckt, akzeptiert es das resize anscheinend nicht und der Inhalt wird in Orginalgröße dargestellt. Kann man das irgendwie ändern?
    , genau das meinte ich mit dem Zusatz.

    Du kannst ausprobieren:

    setMaximumSize, setMinimumSize und Konsorten, je höher das entsprechende Label in der Widget-Hierarchie steckt, desto aussichtsreicher .

    setStretchFactor und Konsorten für härtere Fälle, falls mehrere Widgets in einem Ober-Widget stecken.

    Ich habe auch versucht, anda_skoas Weg zu gehen, aber die Trolltech Doku meint, dass die Konvertierung QPixmap-Image nicht gerade die schnellste ist.

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das ist schon richtig, weil ja vom Xserver in den Client kopiert werden muss, bzw umgekehrt, aber du wirst das ja vermutlich nicht ununterbrochen machen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von Gartenzwerg
    Registriert seit
    26.06.2003
    Beiträge
    75
    Hab jetzt den Weg von anda_skoa genommen. Dieser ist schön einfach und funktioniert spitze. Das Bild wird sehr selten skaliert, damit sollte die Geschwindigkeit für mich keine Rolle spielen.

    Gartenzwerg
    http://sebastian.familiegibb.de | GiKraSoft | Nachwachsende Rohstoffe
    Ich denke niemals an die Zukunft - sie kommt früh genug.
    Albert Einstein

Lesezeichen

Berechtigungen

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