Grafika 10eh
Poniżej jest kod źródlowy modulu graficznego graph10Eh z objaśnieniami. Możesz troszkę pokopiować do siebie, żeby otrzymać szybką grafikę w trybie 320x200x16bitów. - Dochodzi do 500 klatek na sekundę.- Odtwarza pliki bmp.- Symuluje przezroczystość- Rysuje szybką linię- Potrafi robić print screenyZapraszam do naukiKOD ŹRÓDLOWY:
{$G+}UNIT Graph10E;INTERFACEUSES Types, Fonts, Errors, Standard, MMX;CONST V_MaxEX=320; V_MaxEY=200; BrakZnaku:ARRAY[0..7] OF Byte= {(00, 66, 36, 24, 24, 36, 66, 00);} (0, 0, 0, 0, 0, 0, 0, 0); EkranRect:TRect= (X:0;Y:0;W:320;H:200); MMX_Enabled=FALSE; VerticalRetrace:Boolean=True; V_TextNormal:Boolean=True; VGA_Tryb:Boolean=FAlse;TYPE TEkran10Eh=RECORD Ekr1 : Pointer; Ekr2 : Pointer; END; TObraz=RECORD W, H : Word; TCol : Word; Transparent : Boolean; BMP : Pointer; BPP : Byte; Paleta : Pointer; END; TPicture =^TObraz; TBMPCaption = RECORD BM : Word; Size : Longint; rezerw : Longint; obraz_offset : Longint; info : Longint; Width : Longint; Height : Longint; LPO : Word; BPP : Word; kompresja : Longint; Size_Obr : Longint; HDPI : Longint; VDPI : Longint; Colors : Longint; UColors : Longint; END; TRGB = RECORD R, G, B : Byte; END; TPaleta = RECORD Color : ARRAY[0..255] OF TRGB; END; PPaleta =^TPaleta;VAR DefaultRect : TRect; V_Ekran : TEkran10Eh;FUNCTION V_RGB(r, g, b : Byte) : Word;{FUNCTION V_RGB(R, G, B:Byte):Word;}FUNCTION V_GetBuf(VAR Buf:TEkran10Eh):Byte;FUNCTION V_LoadBMP24(Buf:TPicture;CONST Fn:STRING):Boolean;PROCEDURE V_PrintScreen(CONST Fn:STRING);PROCEDURE V_ToRGB(c : Word; VAR r, g, b : Byte);{PROCEDURE V_ToRGB(Col:Word;VAR R, G, B:Byte);}PROCEDURE V_FreeBuf(VAR Buf:TEkran10Eh);PROCEDURE ShowCaptionBMP(CONST Fn:STRING);PROCEDURE V_VRet;PROCEDURE V_FillChar32(Dest:Pointer;Count:word; Value:Word);PROCEDURE V_FlipBuf(Buf : TEkran10Eh);PROCEDURE V_Set10Eh;PROCEDURE V_End10Eh;PROCEDURE V_ClearScreen(Buf:TEkran10Eh; Col:Word);PROCEDURE V_HLine(Buf:TEkran10Eh; X, Y, W:Integer;C:Word);PROCEDURE V_VLine(Buf:TEkran10Eh; X, Y, H:Integer;C:Word);PROCEDURE V_Pix(Buf:TEkran10Eh; X, Y:Integer;C:Word);PROCEDURE V_Line(Buf:TEkran10Eh; X1, Y1, X2, Y2:Integer;C:Word);PROCEDURE V_HLineAlpha1(Buf:TEkran10Eh; X, Y, W:Integer;C:Word;Alpha:Byte);PROCEDURE V_RozmyjEkran(Buf:TEkran10Eh; Speed:Byte);PROCEDURE V_KopiujObraz(Buf:TEkran10Eh; Obraz:TPicture; X, Y:Integer);PROCEDURE V_NewImage(VAR Picture:TPicture);PROCEDURE V_FreeImage(VAR Picture:TPicture);PROCEDURE V_WriteXY(Buf:TEkran10Eh;Font:PFont;X, Y:Integer;CONST S:STRING;C:Word;StepX:Byte);PROCEDURE V_CenterText(Buf:TEkran10Eh;Font:PFont;X, Y:Integer;CONST S:STRING;C:Word;StepX:Byte);PROCEDURE V_CopyLine(Buf:TEkran10Eh; Dest:Pointer; X, Y, W:Integer);PROCEDURE V_CopyFromLine(Buf:TEkran10Eh; Line:Pointer; X, Y, W:Integer);PROCEDURE V_LineX(X1, Y1, X2, Y2 : Integer; C: Word);PROCEDURE V_CreateMirroredBMP(VAR Source, Dest:TPicture);IMPLEMENTATION{FUNCTION V_RGB(r, g, b : Byte) : Word;ASSEMBLER;ASM Mov Al, [r] Shl Ax, 5 Mov Al, [g] Shl Ax, 3 And Al, 11100000b Shr [b], 3 Or Al, [b]END;PROCEDURE V_ToRGB(c : Word; VAR r, g, b : Byte); ASSEMBLER;ASM Mov Cx, Ds Mov Ax, [c] Lds Bx, [b] Mov [Bx], Al Shl BYTE PTR [Bx], 3 Shr Ax, 5 Lds Bx, [g] Mov [Bx], Al Shl BYTE PTR [Bx], 2 Shr Ax, 6 Lds Bx, [r] Mov [Bx], Al Shl BYTE PTR [Bx], 3 Mov Ds, CxEND;FUNCTION V_RGB(R, G, B:Byte):Word;BEGIN V_RGB:=(B SHR 3) OR ((G SHR 2) SHL 5) OR ((R SHR 3) SHL 11);END;{*************************************************************************PROCEDURE V_ToRGB(Col:Word;VAR R, G, B:Byte);BEGIN R:=(Col AND (31 SHL 11)) SHR 8; G:=(Col AND (63 SHL 5)) SHR 3; B:=BYTE(Col SHL 3);END;FUNCTION V_GetBuf(VAR Buf:TEkran10Eh):Byte;BEGIN Buf.EKR1:=NIL; Buf.EKR2:=NIL; V_GetBuf:=E_OK; IF MemAvail<128000 THEN BEGIN V_GetBuf:=E_PAMIEC; Exit; END; GetMem(Buf.EKR1, 64000); GetMem(Buf.EKR2, 64000); V_Ekran.EKR1:=Buf.EKR1; V_Ekran.EKR2:=Buf.EKR2;END;PROCEDURE V_FreeBuf(VAR Buf:TEkran10Eh);BEGIN FreeMem(Buf.EKR1, 64000); FreeMem(Buf.EKR2, 64000); Buf.EKR1:=NIL; Buf.EKR2:=NIL; V_Ekran.EKR1:=NIL; V_Ekran.EKR2:=NIL;END;PROCEDURE V_VRet;BEGINIF VerticalRetrace THEN ASM Mov Dx, 3dah @Powrot: In Al, Dx Test Al, 00001000b Jnz @Powrot ...
Slayer413