Seite 1 von 1
QPixmap zusammensetzen
Verfasst: 3. Juni 2008 13:56
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ß
Verfasst: 3. Juni 2008 14:04
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.
Verfasst: 3. Juni 2008 15:40
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ß
Verfasst: 3. Juni 2008 16:30
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
Verfasst: 3. Juni 2008 17:00
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ß.
Verfasst: 3. Juni 2008 17:08
von PeterLustig
Füll es mit Transparenz zu beginn.
Verfasst: 3. Juni 2008 17:19
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ß.
Verfasst: 3. Juni 2008 20:08
von Sephral
Dieser Thread wäre doch z.B. was für die FAQ.
Den Codeschnipsel kann ich auch gut brauchen
Danke @ Thorsten