線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2040
推到 Plurk!
推到 Facebook!

請問Image1MouseMove下連續繪點問題?

答題得分者是:ikk
shanesss
一般會員


發表:14
回覆:18
積分:6
註冊:2008-08-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-05 17:54:29 IP:118.168.xxx.xxx 訂閱
各位大大好

我想製作一個類似小畫家的鉛筆工具,
能在Image上隨意繪出圖形,
但是繪圖的時候,
只要滑鼠移動快一點,
中間會有一些點漏掉,
不像小畫家中的如此順
請問這是要設定哪裡呢?

程式碼如下:

[code cpp]

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Canvas->Brush->Color=clBlack; //底色
Image1->Canvas->Rectangle(0,0,500,500);//繪
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
Image1->Canvas->Pixels[X][Y]=clRed;
}
//---------------------------------------------------------------------------
[/code]



謝謝各位大大
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-05 18:02:23 IP:163.28.xxx.xxx 訂閱
那是要自己去判斷的吧....
MouseMove 給的就不會是連續的....
------
FPGA驗證, FPGA開發平台, http://smims.com
shanesss
一般會員


發表:14
回覆:18
積分:6
註冊:2008-08-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-05 18:26:40 IP:118.168.xxx.xxx 訂閱
ikk大大你好~
又來麻煩你了~

大大的意思是說,
我要自己寫一個連續判斷滑鼠(X,Y)的程式了嗎?



謝謝
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-05 18:30:40 IP:163.28.xxx.xxx 訂閱
判斷滑鼠左鍵是否有放開, 沒有的話, move之間的座標就是要連續...
------
FPGA驗證, FPGA開發平台, http://smims.com
shanesss
一般會員


發表:14
回覆:18
積分:6
註冊:2008-08-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-06 16:23:05 IP:220.136.xxx.xxx 訂閱
大大你好

如果我用MoveTo與LineTo是可以直接取連續點,
但有方法知道那些連續點的座標嗎?

謝謝
5515531
一般會員


發表:19
回覆:44
積分:12
註冊:2008-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-08 14:27:11 IP:140.134.xxx.xxx 訂閱
這是我用OPENGL寫的一個小畫家
不知道是不是你要的!!

[code cpp]
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
OpenGLAPPanel1->Repaint ();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenGLAPPanel1Init(TObject *Sender)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
md = 0;
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-400,300,-725);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenGLAPPanel1Resize(TObject *Sender)
{
if (OpenGLAPPanel1->Height==0)
{
OpenGLAPPanel1->Height=1;
}
glViewport(0,0,OpenGLAPPanel1->Width,OpenGLAPPanel1->Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0f,(GLfloat)OpenGLAPPanel1->Width/(GLfloat)OpenGLAPPanel1->Height,0.1f,1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluOrtho2D( 0, 800, 0, 600 );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenGLAPPanel1Paint(TObject *Sender)
{
glLoadIdentity();
glTranslatef(-400,300,-725);
glEnable(GL_CULL_FACE);
if (md==1 && mm==0 && ms==1 )
{
glColor3f(r,g,b);
glBegin(GL_LINES);
glVertex3f(x1,-y1,0.0f);
glVertex3f(x2,-y2,0.0f);
glEnd();
xo = x2;
yo = y2;
}

if (md==1 && mm==1 && ms==1 )
{
glColor3f(1.0f,1.0f,1.0f);
glBegin(GL_LINES);
glVertex3f(x1,-y1,0.0f);
glVertex3f(xo,-yo,0.0f);
glEnd();
glColor3f(r,g,b);
glBegin(GL_LINES);
glVertex3f(x1,-y1,0.0f);
glVertex3f(x2,-y2,0.0f);
glEnd();
xo = x2 ;
yo = y2 ;
}

if (md==1 && mm==1 && ms==2 )
{
glColor3f(1.0f,1.0f,1.0f);
glBegin(GL_LINE_LOOP);
glVertex3f(x1,-y1,0.0f);

glVertex3f(x1,-yo,0.0f);
glVertex3f(xo,-yo,0.0f);
glVertex3f(xo,-y1,0.0f);
glEnd();
glColor3f(r,g,b);
glBegin(GL_LINE_LOOP);
glVertex3f(x1,-y1,0.0f);

glVertex3f(x1,-y2,0.0f);
glVertex3f(x2,-y2,0.0f);
glVertex3f(x2,-y1,0.0f);

glEnd();
xo = x2 ;
yo = y2 ;
}
if (md==1 && mm==1 && ms==3 )
{
glColor3f(r,g,b);
glBegin(GL_LINES);
glVertex3f(x1,-y1,0.0f);
glVertex3f(x2,-y2,0.0f);
glEnd();
x1 = x2 ;
y1 = y2 ;
}
if (md==1 && mm==1 && ms==4 )
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenGLAPPanel1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
md = 1 ;
x1 = X ;
y1 = Y ;
xo = x1 ;
yo = y1 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenGLAPPanel1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
mm = 1 ;
x2 = X ;
y2 = Y ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenGLAPPanel1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
md = 0 ;
mm = 0 ;
ms = 0 ;
x1 = X ;
y1 = Y ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Line1Click(TObject *Sender)
{
md = 0 ;
mm = 0 ;
ms = 1 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Quad1Click(TObject *Sender)
{
md = 0 ;
mm = 0 ;
ms = 2 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::point1Click(TObject *Sender)
{
md = 0 ;
mm = 0 ;
ms = 3 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::clear1Click(TObject *Sender)
{
md = 0 ;
mm = 0 ;
ms = 4 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->DoubleBuffered=true;
}

[/code]
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-09 09:58:32 IP:163.28.xxx.xxx 訂閱
可以使用斜率取出
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=29193
------
FPGA驗證, FPGA開發平台, http://smims.com
shanesss
一般會員


發表:14
回覆:18
積分:6
註冊:2008-08-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-16 10:26:16 IP:220.136.xxx.xxx 訂閱
不好意思很晚回覆~謝謝兩位大大指導,
5515531大大的方式是直接使用內建函數繪點或線,
但是我目前是要把這個函數給建立出來,
不過還是感謝大大的熱心,
我先參考ikk大大提供的取斜率方式試看看,
謝謝
系統時間:2024-04-23 22:41:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!