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

有內外輪廓點資料,如何將點資料畫成圖形

尚未結案
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-29 19:32:18 IP:140.118.xxx.xxx 未訂閱
請問各位前輩:     我有圖形內外輪廓點資料,如何將點資料畫成圖形,顯示在Image1元件上,    並且存成BMP檔。不知有沒有範例可提供小弟參考。                                                                謝謝~~                     圖例: 發表人 - taishyang 於 2003/09/29 19:47:36
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-29 19:56:51 IP:140.135.xxx.xxx 未訂閱
breyd您好:
引言: 我有圖形內外輪廓點資料,如何將點資料畫成圖形,顯示在Image1元件上, 並且存成BMP檔。不知有沒有範例可提供小弟參考。
因為不曉得您的外輪廓點資料的形式與內容,所以我以下面的範例做說明 以在Image上逐點描繪出圓形為例
int x=50,y=50,a=10;
 for(int i=1;i<=360;i  )
 {
     int X1=x a*cos(M_PI*i/180);
     int Y1=y a*sin(M_PI*i/180);
     Image1->Canvas->Pixels[X1][Y1]=clRed;
 }
 Image1->Picture->SaveToFile("我要的圖檔.bmp");
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-29 20:16:44 IP:140.118.xxx.xxx 未訂閱
以下是部分點資料: (代表x軸及y軸) 400,-918; 400,-1548; 404,-1598; 404,-1598; 416,-1646; 416,-1646; 436,-1692; 437,-1692; 並且是封閉曲線構成的,再由數個閉曲線XOR,所繪出的圖形 謝謝前輩指點~~
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-29 20:28:09 IP:140.135.xxx.xxx 未訂閱
breyd您好:   其實原理是一樣的,您要打點到Image上的話   用
Image1->Canvas->Pixels[x][y]=clRed;
即可在Image上打上顏色,不過由您的資料看來,影像似乎很大張 建議您可以用下面方式
Image1->Stretch=true;
Graphics::TBitmap *BMP=new Graphics::TBitmap();
BMP->Canvas->Pixels[x][y]=clRed;
...
Image1->Assign(BMP);
delete BMP;
這樣畫面就不會太大了 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-29 21:00:51 IP:140.118.xxx.xxx 未訂閱
請問: 我的點的資料儲存在*.txt中, 小弟不知如何將點資料,依序讀到image中 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-29 21:47:38 IP:140.135.xxx.xxx 未訂閱
breyd您好:   請問您*.txt的格式為何? 您是如何讀取出其內容呢?    順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-29 22:09:42 IP:140.118.xxx.xxx 未訂閱
非常感謝版主熱心為我解答 由於我的點資料較多,我將完整的txt檔資料寄給版主
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-29 22:18:24 IP:140.135.xxx.xxx 未訂閱
breyd您好:   您誤會我的意思了,我只是要知道您的*.TXT檔案格式為何   並告訴您該如何進行(ex.範例),我並不是要幫您寫出完整程式的 下面是範例程式碼您參考看看 < class="code"> //畫一個圓,並將座標存入data.txt void __fastcall TForm1::Button1Click(TObject *Sender) { TStringList*data =new TStringList(); int x=50,y=50,a=10; for(int i=1;i<=360;i ) { int X1=x a*cos(M_PI*i/180); int Y1=y a*sin(M_PI*i/180); data->Add(X1); data->Add(Y1); Image1->Canvas->Pixels[X1][Y1]=clRed; } Image1->Picture->SaveToFile("我要的圖檔.bmp"); data->SaveToFile("data.txt"); delete data; } //--------------------------------------------------------------------------- //讀取data.txt並畫出圖形 void __fastcall TForm1::Button2Click(TObject *Sender) { TStringList* data=new TStringList(); data->LoadFromFile("data.txt"); for (int i=0;iCount-1;i ) { int x=data->Strings[i].ToInt(); int y=data->Strings[i 1].ToInt(); Image2->Canvas->Pixels[x][y]=clRed; } delete data; } //--------------------------------------------------------------------------- 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-29 22:46:02 IP:140.118.xxx.xxx 未訂閱
可能我表達不太好 sorry 流程: 我的資料可能有好幾個封閉曲線, 若第一筆點資料,建構成一個封閉輪廓 第二筆點資料,建構成第二個封閉輪廓 第一個輪廓與第二個輪廓為XOR(PS.輪廓內為白色,二個輪廓相互重疊的地方 為黑色) 第三個輪廓......跟上述相同 一個TXT檔內 只有一個最大輪廓,其它為小輪廓,並且都在大輪廓內
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-29 23:45:20 IP:140.135.xxx.xxx 未訂閱
breyd您好: 請參考下面的程式,將您的文字檔X與Y座標值取出  您文字檔內容如下圖所示 以PD為開頭PU為結尾當作一封閉輪廓座標資料 利用下面code將X與Y取出
TStringList *Source=new TStringList();
 TStringList *Data1=new TStringList();
 TStringList *Data2=new TStringList();
 Source->LoadFromFile("1.txt");
 for(int i=0; iCount; i++)
  {
   Data1->CommaText=Source->Strings[i];
   for(int j=0; jCount; j++)
   {
    Memo1->Lines->Add(Data1->Strings[j]);
    Data2->Add(Data1->Strings[j]);
   }
  }
 delete Source;
 delete Data1;     for (int i=1;i<=Data2->Count-2;i+=2)
 {
  int X=Data2->Strings[i].Delete(1,2).ToInt();  //x座標位置
  Memo2->Lines->Add("X:"+IntToStr(X));
  int Y=Data2->Strings[i+1].SubString(1,Data2->Strings[i+1].Length()-1).ToInt(); //y座標位置
  Memo2->Lines->Add("Y:"+IntToStr(Y));
 }
 delete Data2;
接下來您必需將位置映射到Image上[左上角為原點(0,0)] 這部分就交給您了 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-30 13:01:43 IP:140.118.xxx.xxx 未訂閱
謝謝版主指點: 程式已寫出來了 謝謝~~
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-30 15:39:35 IP:140.135.xxx.xxx 未訂閱
breyd您好:   願意分享您的經驗供將來有需要的人參考嗎?< > 順心< > ~我也是在學習的階段,回答的不好請您多多見諒與指教~
breyd
一般會員


發表:11
回覆:10
積分:4
註冊:2003-05-29

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-30 19:04:18 IP:140.118.xxx.xxx 未訂閱
程式的功能完成百分之七十,圖形可顯示出來,但還有一些bug要解決。 若完成我會上傳,供將來有需要的人。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-09-30 19:16:13 IP:140.135.xxx.xxx 未訂閱
breyd您好:
引言:程式的功能完成百分之七十,圖形可顯示出來,但還有一些bug要解決。 若完成我會上傳,供將來有需要的人。
在此先替大家說聲謝謝,等您喔 順心 > <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
系統時間:2024-05-05 20:15:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!