Seite 1 von 1

Einblenden/Ausblenden mit QT

Verfasst: 12. Oktober 2004 10:35
von bar
Hallo,

Zurzeit beschäftige ich damit, die Möglichkeit zu finden die Einblendungs-und Ausblendungseffekte (ähnlich wie bei Power Point) mit Hilfe von Qt zu erstellen.
Ich habe bis jetzt nur diese Effekte mit der Methode setMask() geschafft, aber es ist zu pixelig :(

In meinem Fall wäre es perfekt, wenn ich auf meine Pixmap's den AlphaChannel setzen konnte... Aber sieht ziemlich problematisch aus...

Vielleicht hat sich schon jemand mit diesem Problem auseinander gesetzt?!

Vielen Dank!

Verfasst: 13. Oktober 2004 14:14
von lepsai
Beschreib mal etwas ausführlicher, was du machen möchtest...

Verfasst: 13. Oktober 2004 14:44
von bar
hallo,

danke für die Antwort!

ich habe gestern geschafft!
na ja, ich verwende jetzt für Einblenden und Ausblenden Alpha-Wert von QImage...

Verfasst: 29. Oktober 2004 13:01
von nando
Hi,

nur zur Info zum Thema Alpha Werte:

Ab QT4 soll man auch auf 2D Elemente einen Alpha filter setzen koennen.


Gruss,
Nando

Verfasst: 29. Oktober 2004 13:19
von Goos
nando hat geschrieben:Hi,

nur zur Info zum Thema Alpha Werte:

Ab QT4 soll man auch auf 2D Elemente einen Alpha filter setzen koennen.


Gruss,
Nando
Wie genau meinst das?
Ich war ansich der Meinung, dass QImage ein 2D Elemet ist.

Goos

Verfasst: 29. Oktober 2004 13:32
von nando
hi,
ich meine damit z.b

rectangles, circles, lines, text usw.....

Verfasst: 4. November 2004 04:59
von Amadeus
Hi,
kannst Du mal bitte ein bischen erklären, wie du das geschafft hast,
am besten mit dem entspr. Quelltext, das würde mich echt mal interessieren.

Verfasst: 11. November 2004 11:05
von bar
Hallo,

ich versuche jetzt zu erklären, vielleicht programmtechnisch habe ich nicht so sauber programmeirt(mir fehlen die Erfahrungen), aber algorithmentechnisch sieht so aus:

1) ein Screenshort von meinem Widget:
mypixmap = QPixmap::grabWidget(mywidget,0,0,size_x,size_y);
2) erzeuge QImage mit AlphaBuffer davon:
myimage->setAlphaBuffer(true);
*myimage = mypixmap.convertToImage();
3) dann erzeuge ich noch ein alpha_Image und überschreibe diesen mit unterschiedlichen Alpha-Werten von myimage (32-Bit, die letzten 8 für Alpha-Wert), dann lasse ich ihn anzeigen:
QImage alpha_image (size_x,size_y,32);
alpha_image.setAlphaBuffer(true);
for(int j =0; j < size_y; j++ ){
for (int i = 0; i < 800; i++){
QRgb pixel;
QRgb p = myimage->pixel(i,j);
pixel = qRgba( qRed(p),qGreen(p),qBlue(p),Alpha_Wert );
alpha_image.setPixel(i,j,pixel);
}
}
4)lasse anzeigen
QPixmap* pix = new QPixmap(alpha_image);
bitBlt(animated_widget,0,0,pix,0,0,size_x,size_y,CopyROP);
5) dann entsprechend ändere ich Alpha-Wert von 0 bis 255;
mit setter und getter-Methoden...
6) Um diesen Verlauf zu erreichen (Alpha-Wert von 0 bis 255), setze ich QTimerEvent, der , wenn Alpha-Wert 255 erreicht hat, gekillt wird.

So habe ich geschrieben, eigentlich sieht relativ gut aus...
Dann kann die unterschiedlichen mathematischen Ansätze benutzt werden um Einblenden/Ausblenden zu optimieren (von der Mitte z.B. vom Bild, oder von oben nach unten und etc)