Bresenham直线画法:从(x0,y0)到(x1,y1)procedure Bresenham_Line(Image:TImage;x0,y0,x1,y1:Integer);
var
i,p,dx,dy,s0,s1,x,y:Integer;
isChanged:Boolean;
begin
dx:=Abs(x1-x0);
dy:=Abs(y1-y0);
s0:=Sign(x1-x0);
s1:=Sign(y1-y0);
x:=x0;
y:=y0;
if dy>dx then
begin
i:=dy;
dy:=dx;
dx:=i;
isChanged:=true;
end
else
isChanged:=false; p:=2*dy-dx;
for i:=1 to dx do
begin
Image.Canvas.Pixels[x,y]:=clRed;
if P>=0 then
begin
if isChanged then
x:=x+s0
else
y:=y+s1;
p:=p-2*dx;
end;
if isChanged then
y:=y+s1
else
x:=x+s0;
p:=p+2*dy;
end;
end;
var
i,p,dx,dy,s0,s1,x,y:Integer;
isChanged:Boolean;
begin
dx:=Abs(x1-x0);
dy:=Abs(y1-y0);
s0:=Sign(x1-x0);
s1:=Sign(y1-y0);
x:=x0;
y:=y0;
if dy>dx then
begin
i:=dy;
dy:=dx;
dx:=i;
isChanged:=true;
end
else
isChanged:=false; p:=2*dy-dx;
for i:=1 to dx do
begin
Image.Canvas.Pixels[x,y]:=clRed;
if P>=0 then
begin
if isChanged then
x:=x+s0
else
y:=y+s1;
p:=p-2*dx;
end;
if isChanged then
y:=y+s1
else
x:=x+s0;
p:=p+2*dy;
end;
end;
解决方案 »
- delphi菜鸟提问
- 哪位仁兄知道这个OCI_NO_DATA是什么错误 ?
- 两个ado查询.一个ADO已经更改了数据库,如何更新另一个已经打开的ADO查询
- AdoQuery 无法为更新定位行。一些值可能已经在最后一次读取后已更改。
- 关于socket接收数据的问题
- 如何使用ADODdataSet查询输入的字符串是否为数据库中某一字段的子串(急)
- 哪位兄弟對DBGrid比較熟,幫我解決一個問題,急死我了!!!!!謝謝
- 如何让MEDIAPLAYER播放LISTBOX中的列表文件?
- 怎么样保存MDI中的子窗体childform,在运行中把它当成一个文件再次打开?
- 求助,打印问题!!!
- 一个小问题,70分绝对超值
- 一定给分!如何仅仅让任务栏上的开始按钮及右边的时间显示失效。
http://www.truevcl.com
有画线的控件