Solved

# Line Drawing Algorithm

Posted on 2003-11-26
1,550 Views
Hi Experts!

I Want To Write a Procedure That Draws a Line In Graphic Mode 640x480.
I Know That TP7.0 Has This Procedure in Graph.tpu But Because I'm Writing My New OS With Assembly,So I Have To Write a New Proc For Drawing Line.

I Have Read Bresenham's Line Algorithm But It Has a Lot Of Problems Like:
When Y is bigger then X The Procedure Draws Just a Straight Line.

Bye
Programmer-x

0
Question by:Hamidreza Vakilian

LVL 1

Expert Comment

0

LVL 2

Accepted Solution

MrT-RSI earned 50 total points
procedure line(x1,y1,x2,y2 : integer;color : byte);
var
x21l,y21l,d1xl,d1yl,d2xl,d2yl,max21l,min21l,duml,loopl : integer;
begin
x21l := x2 - x1;
y21l := y2 - y1;
d1xl := sign(x21l);
d1yl := sign(y21l);
d2xl := d1xl;
d2yl := 0;
max21l := abs(x21l);
min21l := abs(y21l);
if max21l < min21l then begin
d2xl := 0;
d2yl := d1yl;
duml := max21l; max21l := min21l; min21l := duml;
end;
duml := max21l shr 1;
for loopl := 0 to max21l do begin
putpixel(x1,y1,color);
duml := duml + min21l;
if duml >= max21l then begin
duml := duml - max21l;
x1 := x1 + d1xl;
y1 := y1 + d1yl;
end else begin
x1 := x1 + d2xl;
y1 := y1 + d2yl;
end;
end;
end;

with

function sign(a : integer) : integer; external;
{ Returns the sign of value a (negative: -1, positive: 1, zero: 0).      }

in 32 bit asm:

sign proc near a : word
cmp a,0
setg al ;al = 1 if a > 0
setl ah ;ah = 1 if a < 0
sub al,ah ;-1 if a < 0, 0 if a = 0, 1 if a > 0
cbw ;return an integer
ret
sign endp

This has a own putpixel, which also includes color, just remove the color param for normal putpixel.

Good luck,

- Rob.
0

LVL 14

Author Comment

Hi MrT-RSI!

Can You Convert it To Assembly?
If You Do That,I Will Give 50 Points More.

Bye
Programmer-x
0

LVL 12

Expert Comment

I have an almost complete graphicengine/unit that you can use if you like, I wanted to use graphic
functions that were very optimized for speed in the graphicmodes I wanted to use...
so most of the routines I wrote in assembler and optimized them for mode 13 and
some other Vesa 2.0 modes,

/Hypo
0

LVL 2

Expert Comment

make that 150 and I'll do it !
0

LVL 14

Author Comment

Hi MrT-RSI!

All Right.I Have Converted It To Assembler,But It Has Some Errors When I Use it In My Program.If You Tell What I'm Doing Wrong I Will Give You That 50 Points More.(50+50=100)
**************************************************************
LINE      MACRO      X1,Y1,X2,Y2
LOCAL      CON1,CON2,OK,IF1,IF2,FIN
X21      DW      0
Y21      DW      0
D1X      DW      0
D1Y      DW      0
D2X      DW      0
D2Y      DW      0
MAX21      DW      0
MIN21      DW      0
DUM      DW      0
X      DW      X1
Y      DW      Y1
XX      DW      X2
YY      DW      Y2
PUSHA

MOV      AX,XX
SUB      AX,X
MOV      X21,AX

MOV      AX,YY
SUB      AX,Y
MOV      Y21,AX

SIGN      X21
MOV      D1X,AX

SIGN      Y21
MOV      D1Y,AX

MOV      AX,D1X
MOV      D2X,AX

MOV      D2Y,0

ABS      X21
MOV      MAX21,AX

ABS      Y21
MOV      MIN21,AX

MOV      AX,MAX21

CMP      AX,MIN21
JL      CON1

JMP      OK

CON1:
MOV      D2X,0
MOV      AX,D1Y
MOV      D2Y,AX

MOV      AX,MAX21
MOV      DUM,AX

MOV      AX,MIN21
MOV      MAX21,AX

MOV      AX,DUM
MOV      MIN21,AX

OK:

MOV      AX,MAX21
SHR      AX,1
MOV      DUM,AX

MOV      CX,MAX21

CON2:

PIXEL      X,Y

MOV      AX,DUM
MOV      DUM,AX

CMP      AX,MAX21
JGE      IF1
JMP      IF2

IF1:
MOV      AX,DUM
SUB      AX,MAX21
MOV      DUM,AX

MOV      AX,X
MOV      X,AX

MOV      AX,Y
MOV      Y,AX

JMP      FIN

IF2:
MOV      AX,X
MOV      X,AX

MOV      AX,Y
MOV      Y,AX

FIN:
LOOP      CON2

POPA
ENDM
**************************************************************
Best Wishes...
Programmer-x
0

LVL 14

Author Comment

Hi MrT-RSI!

I Understood My Problem.I Converted It To ASM and It Works Very Good...

Best Wishes...
Programmer-x
0

## Featured Post

### Suggested Solutions

Get TStatusBar text from another application - Delphi 7 4 1,922
Tstream to hex 1 1,644
How to send email in delphi with image 4 584
find a node in VST 2 46
Possible fixes for Windows 7 and Windows Server 2008 updating problem. Solutions mentioned are from Microsoft themselves. I started a case with them from our Microsoft Silver Partner option to open a case and get direct support from Microsoft. If s…
HOW TO: Connect to the VMware vSphere Hypervisor 6.5 (ESXi 6.5) using the vSphere (HTML5 Web) Host Client 6.5, and perform a simple configuration task of adding a new VMFS 6 datastore.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

#### Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!