home *** CD-ROM | disk | FTP | other *** search
/ PC Interdit / pc-interdit.iso / graph / fade.pas < prev    next >
Pascal/Delphi Source File  |  1994-10-07  |  2KB  |  69 lines

  1. Unit fade;
  2. {pour faire un fondu enchaîné assurant la transition d'une image
  3. (ou partie d'image) déjà affichée à une nouvelle }
  4.  
  5. Interface
  6. Uses ModeXLib;
  7.  
  8. Var Colors:Word; {nombre de couleurs par image }
  9.  
  10. Procedure fade_ResetPic(y,Hauteur:Word);
  11. Procedure FonduEnch(Pic:Pointer;Pal:Array of Byte; Start,y,Hauteur:Word);
  12.  
  13.  
  14. Implementation
  15. Var i,j:Word;                        {compteurs temporaires }
  16.     Dest_Pal:Array[0..768] of Byte;  {palette de destination temporaire }
  17.  
  18. Procedure fade_set(Source:Pointer;Start,y,Hauteur:Word);external;
  19. {"mélange" la source avec la mémoire VGA }
  20. {la source est exploitée à partir de la ligne Start
  21. et la mémoire VGA à partir de la ligne y avec une hauteur "hauteur" }
  22.  
  23. Procedure fade_ResetPic(y,Hauteur:Word);external;
  24. {prépare une image obtenue par fondu enchaîné à
  25. un nouvel effet de fondu enchaîné}
  26. {réduit les couleurs de "Colors^2" à "Colors" }
  27. {ici aussi y=ligne en mémoire VGA, Hauteur=Hauteur de la zone à traiter }
  28.  
  29. {$l c:\edition\prog\fr\asm\fade}
  30.  
  31.  
  32. Procedure fade_CopyPal;
  33. {fabrique Colors^2 exemplaires de la palette
  34. (multiplication du bloc 0 non homogène) }
  35. Begin
  36.   For i:=1 to Colors do
  37.    Move(Palette[0],Palette[i*3*Colors],Colors*3);
  38.  
  39. End;
  40.  
  41. Procedure fade_expans(Var Pal:Array of Byte);
  42. {dilate la palette à Colors^2 (chaque couleur est répétée individuellement)}
  43. {forme des blocs homogènes à partir des couleurs 0..Colors-1 }
  44. Begin
  45.   For i:= 0 to Colors-1 do      {traite chaque couleur }
  46.     For j:=0 to Colors -1 do    {et la réécrit Colors fois }
  47.       Move(Pal[i*3],Pal[(i+1)*3*Colors+j*3],3);
  48. End;
  49.  
  50. Procedure FonduEnch(Pic:Pointer;Pal:Array of Byte; Start,y,Hauteur:Word);
  51. {fait un fondu enchaîné de l'image
  52. actuellement visible vers Pic (de palette Pal),
  53. début à la ligne "Start" de Pic, copie "hauteur"
  54. lignes en ordonnée y de l'image actuelle}
  55. Begin
  56.   WaitRetrace;  {synchronisation}
  57.   fade_CopyPal; {multiplie les blocs de la palette courante }
  58.   SetPal;       {réalise cette nouvelle palette }
  59.   Move(Palette,Dest_Pal,768);   {pour conserver des parties de la palette d'origine }
  60.   Move(pal,Dest_Pal,Colors*3);  {charge la palette de destination }
  61.   fade_expans(Dest_Pal);     {expanse les blocs de la palette de destination }
  62.   fade_set(pic,start,y,hauteur);  {mélange la nouvelle image }
  63.   fade_to(Dest_Pal,1);            {et lance le fondu enchaîné}
  64. End;
  65.  
  66. Begin
  67.   Colors:=15; {valeur de défaut uniquement !}
  68. End.
  69.