QPixmap zusammensetzen

Alles rund um die Programmierung mit Qt
Antworten
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

QPixmap zusammensetzen

Beitrag von Thorsten »

Hallo zusammen!

Ich suche nach einer Möglichkeit mehrere QPixmaps zusammenzusetzen.

Vielleicht in Form einer Funktion:

Code: Alles auswählen

QPixmap compose(const QPixmap &p1, const QPixmap &p2);
Zur Vereinfachung gehe ich davon aus, dass die Höhen von p1 und p2 gleich sind. Die Breite des zurückgegebenen QPixmaps, ist dann die Breite von p1 plus die Breite von p2.

Ich habe schon in der Doku nach Funktionen gesucht, die ein QPixmap in ein QPixmap kopieren können, doch leider bis aufs Gleichsetzten nichts gefunden.

Code: Alles auswählen

QPixmap compose(const QPixmap &p1, const QPixmap &p2)
{
    if (p1.heigth() != p2.heigth())
         return QPixmap();

    QPixmap e(p1.width() + p2.width(), p1.heigth());

    // Problem

    return e;
}
Bin aber auch für ganz andere Lösungen offen.

Lieben
Gruß
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Ich denke (bin mir nicht sicher) du erstellst einen QPainter und übergibst diesem das PaintDevice deines QPixmap. Mit dem Painter kannst du dann deine zwei Bilder drauf malen.
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

Beitrag von Thorsten »

Danke!

Folgendes funktioniert soweit, dass die Bilde zusammengefügt werden:

Code: Alles auswählen

inline QPixmap pixmapJoin(const QPixmap &p1, const QPixmap &p2)
{
    QPixmap r(p1.width() + p2.width(), qMax(p1.height(), p2.height()));

    QPainter painter(&r);
    painter.drawPixmap(0, 0, p1);
    painter.drawPixmap(p1.width(), 0, p2);

    return r;
}
Leider ist der Hintergrund jetzt nicht mehr transparent sondern schwarz.

Ich habe schon
void QPainter::setOpacity ( qreal opacity )
und
void QPainter::setBackground ( const QBrush & brush )
ausprobiert. Ohne Erfolg :-(

In der Dokumentation von QPainter finde ich nichts, was mir da weiterhilft. Gibt es da ein Flag, welches man setzen muss.

Gruß
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du hast ja auch das erstellte Pixmap gar nicht befüllt - also sei froh das nicht alles mögliche im Hintergrund ist. Doku: http://doc.trolltech.com/4.3/qpixmap.html#QPixmap-2
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

Beitrag von Thorsten »

Ich habe ja auch nichts zum "Befüllen".
In der Doku steht:
The content of the pixmap is uninitialized.
Toll, und wie bekomme ich es jetzt initialisiert?

Im Klartext: Ich möchte ein transparentes QPixmap.

Kennst du vielleicht noch elegantere Methoden um mein anfängliches Problem zu lösen.

Gruß.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Füll es mit Transparenz zu beginn.
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

Beitrag von Thorsten »

Danke.

Ich habe fill immer bei QPainter gesucht.

Jetzt funktioniert es:

Code: Alles auswählen

inline QPixmap pixmapJoin(const QPixmap &p1, const QPixmap &p2)
{
    QPixmap r(p1.width() + p2.width(), qMax(p1.height(), p2.height()));
    r.fill(Qt::transparent);

    QPainter painter(&r);
    painter.drawPixmap(0, 0, p1);
    painter.drawPixmap(p1.width(), 0, p2);

    return r;
}
Gruß.
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Dieser Thread wäre doch z.B. was für die FAQ.

Den Codeschnipsel kann ich auch gut brauchen :-)

Danke @ Thorsten
Antworten