Fade In Fade Out GDI

cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008 - 21 juin 2006 à 21:05
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008 - 19 août 2006 à 14:09
salut
je voulais m'attaquer à une routine de fading in/out
mais j'ai un probleme de lenteur.
j'ai utilisé
1. la technique : pixel par pixel en recuperant la couleur...ça passe bien pour de petite surface
2. l'alphablending avec une image noire... idem

sur une surface de 700x400 ça rame.

j'ai verifié, et en tout ma surface ne comporte pas plus de 40 couleurs utilisées.
je me demandais si il etait possible de faire comme au bon vieux temps (sur Amiga par exemple) en s'attaquant directement à la palette de couleurs.
j'ai trouvé un exemple sur codeguru : http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c1717/

mais je n'arrive pas à l'utiliser.

je comprends le principe de AnimatePalette (je l'ai testé avec une palette perso sur un graphe gdi)
et la fonction CreateReservedPalette fournit.
par contre comment modifier FadeIn/FadeOut pour qu'elle fonctionne dans une boucle PAINT ou TIMER ?
comment l'appliquer à l'ecran en cours ?

y-a-t-il plus simple ?

comment cela fonctionne-t-il avec plus de 236 couleurs (limite de cet exemple) ?

j'arrive à faire pas mal de chose avec le simple GDI, mais je bloque sur le fading!

merci

7 réponses

24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
21 juin 2006 à 22:01
je pense que tu dois pouvoir faire comme ça :

init :
- DC1 avec l'image
- DC2 avec un rectangle noir

dans ton timer :
- tu blit DC1 sur ecran
- tu blit DC2 sur ecran avec un AND ou OR, enfin faut cherche le masque du blit qui convient pour faire ça. (dernier param de bitblt)
- tu reinit pour le prochain passage :
                 - tu changes la couleur de ton DC2 (en le faisant se rapprocher du blanc de plus en plus 0x0000000 -> 0xFFFFFF. ça doit etre faisable avec une brush que tu fais varier et l'instruction rectangle)

pour faire l'inverse tu pars d'un rectangle blanc et tu vas vers le noir

++
24K
0
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
21 juin 2006 à 22:42
ha oui, tiens... j'essaierai ça
malgré tout, il doit etre possible de faire quelque chose avec animatepalette, mais c'est pas simple
0
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
22 juin 2006 à 10:47
l'idée du rectangle noir avec blit et mask c'est ce que j'ai fais mais avec la fonction AlphaBlend() et c'est lent. et j'ai pas trouvé de combinaison rastop pour faire ça.

si quelqu'un dans la salle a reussi à utiliser AnimatePalette pour du fading
merci
0
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
18 août 2006 à 14:26
UP

peut on faire un fading noir=>palette image/palette=>noir avec le GDI en utilisant SetDIBitsToDevice ? est-ce possible sans que ça rame ? est-ce possible avec une image 16 couleurs mais sur un bitmap créé en 24 bits ?

boudiou, un truc aussi simple qu'un fading facile à faire en assembleur sur Amiga, c'est l'enfer sur win !! alors que j'ai quasi réussi à faire les anciens effets!
alors si une âme charitable a reussi, sans passer par direct/opengl
ou sinon, comment faire en OpenGl ou Direct2D avec un exemple simple d'utilisation (C si possible, pas c++)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
19 août 2006 à 03:33
j'ai quasi réussi à faire les anciens effets!
=> ah tiens au passage, comment tu fais des rasters sous win, ça m'interesse ;-)
0
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
19 août 2006 à 14:08
ça depend de l'effet
- un roller raster ("rouleaux de lumiere") je le fais avec *(framebuf+x+y*width)=RGB(col.r,col.g,col.b) en utilisant un tableau de couleurs et en les decalant à gauche ou à droite

on obtient soit 1 ligne raster soit 2 "rouleaux" avec 12 lignes (selon le nombre de couleurs)

- des barres de copper, avec un fonction draw_copper(rect* r,int add) qui dessine la barre avec FillRect(hdc,r,brush), brush=createsolidbrush(RGB(copper[i].r,copper[i].g,copper[i].b)) avec i (0-15), et  copper[] un tableau de couleurs de chaque ligne (16 lignes de degradé)

faudrait que je remetter au propre mon intro multi effets, je peux pas poster ça comme ça.
0
cs_bbear Messages postés 92 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 29 mai 2008
19 août 2006 à 14:09
en tout cas ça repond pas à ma question... bouh...
0
Rejoignez-nous