- procedure ASMPoint(Bitmap:TBitmap;X,Y:dword;color:dword);
- var
- p1:pointer;
- begin
- if (X>Bitmap.Height-1) or (Y>Bitmap.Width-1) then exit;
- p1:=Bitmap.ScanLine[X-1];
- case Bitmap.PixelFormat of
- pf32bit:
- asm
- push edi
- mov edi,p1
- mov eax,y
- shl eax,2
- add edi,eax
- mov eax,color
- mov [edi],eax
- pop edi
- end;
- pf24bit:
- asm
- push edi
- mov edi,p1
- mov eax,y
- imul eax,3
- add edi,eax
- mov eax,color
- mov ecx,eax
- shr ecx,16
- mov [edi],ax
- mov [edi+2],cl
- pop edi
- end;
- else
- bitmap.Canvas.Pixels[X,Y]:=Color;
- end;
-
- procedure ASMHorizontal(Bitmap:TBitmap;Y:dword;color:dword);
- var
- p1:pointer;m:dword;
- begin
- p1:=Bitmap.ScanLine[Y];
- m:=Bitmap.Width;
- case Bitmap.PixelFormat of
- pf32bit:
- asm
- push edi
- mov ecx,m
- mov eax,color
- mov edi,p1
- rep stosd
- pop edi
- end;
- pf24bit:
- asm
- push edi
- xor ecx,ecx
- mov eax,color
- mov edi,p1
- @Loop1:
- mov [edi],eax
- add edi,3
- inc ecx
- cmp ecx,m
- jne @Loop1
- pop edi
- end;
- else
- Bitmap.Canvas.Pen.Color:=Color;
- Bitmap.Canvas.MoveTo(0,Y);
- Bitmap.Canvas.LineTo(m,Y);
- end;
- end;
-
- procedure ASMClear(Bitmap:TBitmap;color:dword);
- var
- p1:pointer;m:dword;
- begin
- with bitmap do begin
- p1:=ScanLine[height-1];
- m:=Width*Height;
- end;
- case Bitmap.PixelFormat of
- pf32bit:
- asm
- push edi
- mov ecx,m
- mov eax,color
- mov edi,p1
- rep stosd
- pop edi
- end;
- pf24bit:
- asm
- push edi
- xor ecx,ecx
- mov eax,color
- mov edx,color
- shr edx,16
- mov edi,p1
- @Loop1:
- mov [edi],ax
- mov [edi+2],dl
- add edi,3
- inc ecx
- cmp ecx,m
- jne @Loop1
- pop edi
- end;
- else
- Bitmap.Canvas.Brush.Color:=Color;
- Bitmap.Canvas.Rectangle(0,0,Bitmap.Width,Bitmap.Height);
- end;
- end;
procedure ASMPoint(Bitmap:TBitmap;X,Y:dword;color:dword);
var
p1:pointer;
begin
if (X>Bitmap.Height-1) or (Y>Bitmap.Width-1) then exit;
p1:=Bitmap.ScanLine[X-1];
case Bitmap.PixelFormat of
pf32bit:
asm
push edi
mov edi,p1
mov eax,y
shl eax,2
add edi,eax
mov eax,color
mov [edi],eax
pop edi
end;
pf24bit:
asm
push edi
mov edi,p1
mov eax,y
imul eax,3
add edi,eax
mov eax,color
mov ecx,eax
shr ecx,16
mov [edi],ax
mov [edi+2],cl
pop edi
end;
else
bitmap.Canvas.Pixels[X,Y]:=Color;
end;
procedure ASMHorizontal(Bitmap:TBitmap;Y:dword;color:dword);
var
p1:pointer;m:dword;
begin
p1:=Bitmap.ScanLine[Y];
m:=Bitmap.Width;
case Bitmap.PixelFormat of
pf32bit:
asm
push edi
mov ecx,m
mov eax,color
mov edi,p1
rep stosd
pop edi
end;
pf24bit:
asm
push edi
xor ecx,ecx
mov eax,color
mov edi,p1
@Loop1:
mov [edi],eax
add edi,3
inc ecx
cmp ecx,m
jne @Loop1
pop edi
end;
else
Bitmap.Canvas.Pen.Color:=Color;
Bitmap.Canvas.MoveTo(0,Y);
Bitmap.Canvas.LineTo(m,Y);
end;
end;
procedure ASMClear(Bitmap:TBitmap;color:dword);
var
p1:pointer;m:dword;
begin
with bitmap do begin
p1:=ScanLine[height-1];
m:=Width*Height;
end;
case Bitmap.PixelFormat of
pf32bit:
asm
push edi
mov ecx,m
mov eax,color
mov edi,p1
rep stosd
pop edi
end;
pf24bit:
asm
push edi
xor ecx,ecx
mov eax,color
mov edx,color
shr edx,16
mov edi,p1
@Loop1:
mov [edi],ax
mov [edi+2],dl
add edi,3
inc ecx
cmp ecx,m
jne @Loop1
pop edi
end;
else
Bitmap.Canvas.Brush.Color:=Color;
Bitmap.Canvas.Rectangle(0,0,Bitmap.Width,Bitmap.Height);
end;
end;