home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
graph
/
fade.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-10-07
|
2KB
|
69 lines
Unit fade;
{pour faire un fondu enchaîné assurant la transition d'une image
(ou partie d'image) déjà affichée à une nouvelle }
Interface
Uses ModeXLib;
Var Colors:Word; {nombre de couleurs par image }
Procedure fade_ResetPic(y,Hauteur:Word);
Procedure FonduEnch(Pic:Pointer;Pal:Array of Byte; Start,y,Hauteur:Word);
Implementation
Var i,j:Word; {compteurs temporaires }
Dest_Pal:Array[0..768] of Byte; {palette de destination temporaire }
Procedure fade_set(Source:Pointer;Start,y,Hauteur:Word);external;
{"mélange" la source avec la mémoire VGA }
{la source est exploitée à partir de la ligne Start
et la mémoire VGA à partir de la ligne y avec une hauteur "hauteur" }
Procedure fade_ResetPic(y,Hauteur:Word);external;
{prépare une image obtenue par fondu enchaîné à
un nouvel effet de fondu enchaîné}
{réduit les couleurs de "Colors^2" à "Colors" }
{ici aussi y=ligne en mémoire VGA, Hauteur=Hauteur de la zone à traiter }
{$l c:\edition\prog\fr\asm\fade}
Procedure fade_CopyPal;
{fabrique Colors^2 exemplaires de la palette
(multiplication du bloc 0 non homogène) }
Begin
For i:=1 to Colors do
Move(Palette[0],Palette[i*3*Colors],Colors*3);
End;
Procedure fade_expans(Var Pal:Array of Byte);
{dilate la palette à Colors^2 (chaque couleur est répétée individuellement)}
{forme des blocs homogènes à partir des couleurs 0..Colors-1 }
Begin
For i:= 0 to Colors-1 do {traite chaque couleur }
For j:=0 to Colors -1 do {et la réécrit Colors fois }
Move(Pal[i*3],Pal[(i+1)*3*Colors+j*3],3);
End;
Procedure FonduEnch(Pic:Pointer;Pal:Array of Byte; Start,y,Hauteur:Word);
{fait un fondu enchaîné de l'image
actuellement visible vers Pic (de palette Pal),
début à la ligne "Start" de Pic, copie "hauteur"
lignes en ordonnée y de l'image actuelle}
Begin
WaitRetrace; {synchronisation}
fade_CopyPal; {multiplie les blocs de la palette courante }
SetPal; {réalise cette nouvelle palette }
Move(Palette,Dest_Pal,768); {pour conserver des parties de la palette d'origine }
Move(pal,Dest_Pal,Colors*3); {charge la palette de destination }
fade_expans(Dest_Pal); {expanse les blocs de la palette de destination }
fade_set(pic,start,y,hauteur); {mélange la nouvelle image }
fade_to(Dest_Pal,1); {et lance le fondu enchaîné}
End;
Begin
Colors:=15; {valeur de défaut uniquement !}
End.