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!
Einblenden/Ausblenden mit QT
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)
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)