如何在Image上先画点,然后自动连线或是画弧(100分)

  • 主题发起人 主题发起人 dashi007
  • 开始时间 开始时间
D

dashi007

Unregistered / Unconfirmed
GUEST, unregistred user!
在Image上,通过鼠标的点击,描点,然后这些描好的点,自动的连起来。如何实现
 
不是有自己带的例子吗
 
很简单的,不知你是一边点着一边连还是全点好了一次连?
OnMouseDown中记录下鼠标的点(x1,y1),(x2,y2)...(xn,yn)
Canvas.moveto(x1,y1),lineto(x2,y2),...,lineto(xn,yn)
 
如果要用平滑的曲线连接,又将如何处理lab01
 
我也帮你顶
 
记录完点后用B样条曲线光滑就是了。
 
to liyouweiok 给个例子看看啊.分都给你
 
要得到平滑曲线,则可使用PolyBezier,PolyBezierTo函数描绘一条或多条贝塞尔(Bezier)曲线,明白吗??我很懒,不想写例子
 
需要例子吗?恩,没回答,看来是不需要了,告辞
 
对,贝塞尔曲线可以画平滑曲线。不过要注意它的点是有规定的
仔细看一下帮助就知道怎么做了
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Draw :Boolean;
p1,p2 :TPoint;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Canvas.Pen.Color:=clred;
image1.Canvas.MoveTo(0,30);
image1.Canvas.LineTo(100,30);

image1.Canvas.Pen.Width:=3;
image1.Canvas.MoveTo(0,80);
image1.Canvas.LineTo(100,80);

image1.Canvas.Pen.Width:=1;
image1.Canvas.Pen.Style:=psDot;
image1.Canvas.MoveTo(0,150);
image1.Canvas.LineTo(100,150);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then
begin
Draw :=True;
p1 :=Point(x,y);
p2 :=Point(x,y);
end;
if Button=mbRight then
begin
Image1.Canvas.MoveTo(p1.x,p1.y);
Image1.Canvas.LineTo(p2.x,p2.y);
end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Draw then
begin
Image1.Canvas.Pen.Mode :=pmNotXor;
Image1.Canvas.MoveTo(p1.x,p1.y);
Image1.Canvas.LineTo(p2.x,p2.y);
p2 :=Point(x,y);
Image1.Canvas.MoveTo(p1.x,p1.y);
Image1.Canvas.LineTo(p2.x,p2.y);
end;

end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Draw then
begin
Image1.Canvas.MoveTo(p1.x,p1.y);
Image1.Canvas.LineTo(p2.x,p2.y);
p2 :=Point(x,y);
Image1.Canvas.MoveTo(p1.x,p1.y);
Image1.Canvas.LineTo(p2.x,p2.y);
Draw :=False;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Draw :=False;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
end;

end.
 
to yourname_0 如你的例子能画弧线,用鼠标边点边连,我给100分.
 
楼上的说的很对哈。我也是
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
838
SUNSTONE的Delphi笔记
S
S
回复
0
查看
799
SUNSTONE的Delphi笔记
S
后退
顶部