[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
Well, here are some image routines, I made it to where the WIDTH is stored
in the first two bytes and the HEIGHT is stored in the 3rd and 4th bytes...
If you must really know... I guess it goes along with TP's get/put image
convention... This is for mode $13 ONLY of coarse...
}
Procedure GetImage ( X1, Y1, X2, Y2 : Integer; VAR DEST ) ;
Var Width,S,O : Word ;
BEGIN
S := SEG (DEST);
O := OFS (DEST);
ASM
PUSH DS
MOV DX, Video_Seg
MOV DS, DX
MOV BX, 320
MOV AX, Y1; MUL BX
ADD AX, X1; MOV SI, AX
MOV DX, S
MOV ES, DX
MOV DI, O
MOV DX, Y2; SUB DX, Y1; INC DX
MOV BX, X2; SUB BX, X1; INC BX
MOV WIDTH, BX
MOV AX, WIDTH
STOSW
MOV AX, DX
STOSW
@LOOP:
MOV CX, WIDTH
REP MOVSB
ADD SI, 320; SUB SI, WIDTH
DEC DX
JNZ @LOOP
POP DS
End ;
End ;
Procedure PutImage ( X1, Y1 : Integer; VAR SOURCE ) ;
Var Width, S, O : Word ;
BEGIN
S := SEG (SOURCE);
O := OFS (SOURCE);
ASM
PUSH DS
MOV DX, Video_Seg
MOV ES, DX
MOV BX, 320 { Setup Dest Addr }
MOV AX, Y1; MUL BX
ADD AX, X1; MOV DI, AX
MOV DX, S { Setup Source Addr }
MOV DS, DX
MOV SI, O
LODSW { Get Width and Height }
MOV WIDTH, AX
LODSW
MOV DX, AX
@LOOP:
MOV CX, WIDTH
REP MOVSB
ADD DI, 320; SUB DI, WIDTH
DEC DX
JNZ @LOOP
POP DS
End ;
End ;
Function SaveImage ( X1, Y1, X2, Y2 : Integer ; VAR Size : Word ) : Pointer ;
Var Img : Pointer ;
Begin
FixInt ( X1, X2 ) ; { Put lesser in X1 }
FixInt ( Y1, Y2 ) ; { Put lesser in Y1 }
Size := WORD((X2-X1+1)*(Y2-Y1+1) +4);
GetMem ( Img, Size ) ;
GetImage ( X1, Y1, X2, Y2, Img^ ) ;
SaveImage := Img ;
End ;
Procedure CopyImage ( X1, Y1, X2, Y2, Dx, DY : Integer ) ;
Var Img : Pointer ;
Size : Word ;
Begin
Img := SaveImage ( X1, Y1, X2, Y2, Size ) ;
PutImage ( Dx, Dy, Img^) ;
FreeMem ( Img, Size ) ;
End ;
Procedure LoadImage ( FileName : String ; VAR Img : Pointer ; Var Size : Word
Var F : File ;
Begin
Img := NIL ;
Size := 0 ;
If Not Exist ( FileName ) Then Exit ;
Assign ( F, Filename ) ;
Reset ( F, 1 ) ;
Size := FileSize ( F ) ;
GetMem ( Img, Size ) ;
BlockRead ( F, Img^, Size ) ;
Close ( F ) ;
End ;
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]