十字線留下殘影的問題 |
答題得分者是:chris_shieh
|
wen142
一般會員 發表:22 回覆:27 積分:14 註冊:2004-06-30 發送簡訊給我 |
各位大大您們好
我在彩色影像上面想要做定位的動作
所以採用十字線的方式
我參考了http://delphi.ktop.com.tw/topic.php?TOPIC_ID=61389之後
依然還是沒有把這個問題解決
應該要說是我還是不太懂文中Zard大大的意思
是否請各位大大幫我看看是哪裡出問題
Graphics::TBitmap *TheBitmap; TheBitmap= Image1->Picture->Bitmap ; TheBitmap->PixelFormat = pf24bit; StatusBar1->Panels->Items[0]->Text ="X=" IntToStr(X); StatusBar1->Panels->Items[1]->Text ="Y=" IntToStr(Y); TheBitmap->Canvas->Pen->Width = 1; TheBitmap->Canvas->Pen->Color = clYellow; TheBitmap->Canvas->Brush->Style=bsClear; SetROP2(TheBitmap->Canvas->Pen,R2_XORPEN); TheBitmap->Canvas->Draw(0,0,OrgBitmap); TheBitmap->Canvas->MoveTo(X,0); TheBitmap->Canvas->LineTo(X,TheBitmap->Height); TheBitmap->Canvas->MoveTo(0,Y); TheBitmap->Canvas->LineTo(TheBitmap->Width ,Y);bcb新手上路 請多指教 |
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
[code]
Graphics::TBitmap *TheBitmap;
TheBitmap= Image1->Picture->Bitmap ;
TheBitmap->PixelFormat = pf24bit;
StatusBar1->Panels->Items[0]->Text ="X=" IntToStr(X);
StatusBar1->Panels->Items[1]->Text ="Y=" IntToStr(Y);
TheBitmap->Canvas->Pen->Width = 1;
TheBitmap->Canvas->Pen->Color = clYellow;
TheBitmap->Canvas->Brush->Style=bsClear; //以下這些應該是在OnMouseMove 裡面吧 //清除上次畫的
SetROP2(TheBitmap->Canvas->Pen,R2_XORPEN);
TheBitmap->Canvas->MoveTo(pre_X,0);
TheBitmap->Canvas->LineTo(pre_X,TheBitmap->Height);
TheBitmap->Canvas->MoveTo(0,pre_Y);
TheBitmap->Canvas->LineTo(TheBitmap->Width ,pre_Y); //開始畫
TheBitmap->Canvas->Draw(0,0,OrgBitmap);
TheBitmap->Canvas->MoveTo(X,0);
TheBitmap->Canvas->LineTo(X,TheBitmap->Height);
TheBitmap->Canvas->MoveTo(0,Y);
TheBitmap->Canvas->LineTo(TheBitmap->Width ,Y);
//紀錄位置作為下次清除使用
pre_X = X;
pre_Y = Y; 也可以改用TPanel 元件繪製
用兩個TPanel 元件 各設定
Panel1->Height = 1, Panel1->Width = TBitmap->Width,
Panel2->Width =1, Panel2->Height = TBitmap->Height
設定Image OnMouseMove 時
Panel1->Top = Y;
Panel2->Left = X;
|
wen142
一般會員 發表:22 回覆:27 積分:14 註冊:2004-06-30 發送簡訊給我 |
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
wen142你好: 我的方法比較笨,不知是否合用,參考一下
..... Bmp是貼在Image2上的TBitmap圖 ..... void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { Image2->Picture->Assign(Bmp); Image2->Canvas->Pen->Color = clYellow; Image2->Canvas->Pen->Style = psDot; Image2->Canvas->Pen->Mode = pmNotXor; Image2->Canvas->MoveTo(X,0); Image2->Canvas->LineTo(X,Image2->Height); Image2->Canvas->MoveTo(0,Y); Image2->Canvas->LineTo(Image2->Width,Y); } |
wen142
一般會員 發表:22 回覆:27 積分:14 註冊:2004-06-30 發送簡訊給我 |
JerryKuo大大~感謝您的回應 或許大大們在測試的時候是OK的
有點搞不懂換到我的程式便開始產生了問題
頭殼被混亂了 所以在請大家幫個忙ㄅ
//------------------------------------------------------------------- int PositionLineCount=0; Graphics::TBitmap *TheBitmap; void __fastcall TForm4::PositionLine1Click(TObject *Sender) { PositionLineCount ; if(PositionLineCount%2==1) { PositionLine1->Checked = true; TheBitmap = Form4->Image1->Picture->Bitmap ; } else PositionLine1->Checked = false; } //------------------------------------------------------------------- void __fastcall TForm4::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { TheBitmap->PixelFormat = pf24bit; if(PositionLine1->Checked==true) { StatusBar1->Panels->Items[0]->Text ="X=" IntToStr(X); StatusBar1->Panels->Items[1]->Text ="Y=" IntToStr(Y); Image1->Canvas->Pen->Width = 1; Image1->Canvas->Pen->Color = clYellow; Image1->Canvas->Pen->Mode = pmNotXor; //TheBitmap->Canvas->Brush->Style=bsClear; //TheBitmap->Canvas->Refresh() ; /* SetROP2(TheBitmap->Canvas->Pen,R2_XORPEN); TheBitmap->Canvas->MoveTo(pre_X,0); TheBitmap->Canvas->LineTo(pre_X,TheBitmap->Height); TheBitmap->Canvas->MoveTo(0,pre_Y); TheBitmap->Canvas->LineTo(TheBitmap->Width ,pre_Y); */ //TheBitmap->Canvas->Draw(0,0,OrgBitmap); Image1->Canvas->MoveTo(X,0); Image1->Canvas->LineTo(X,TheBitmap->Height); Image1->Canvas->MoveTo(0,Y); Image1->Canvas->LineTo(TheBitmap->Width ,Y); } } //-------------------------------------------------------------------bcb新手上路 請多指教 |
wen142
一般會員 發表:22 回覆:27 積分:14 註冊:2004-06-30 發送簡訊給我 |
對不起兩位大大
我重新把你們建議的程式碼做測試
發現將兩位的想法放在一起用
效果還不錯
TForm1 *Form1; Graphics::TBitmap *TheBitmap,*OrgBitmap; int pre_X,pre_Y; //------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Image1->Picture->LoadFromFile("c:\\1.BMP"); Image1->AutoSize = true; TheBitmap= Image1->Picture->Bitmap ; OrgBitmap= Image1->Picture->Bitmap ; pre_X = 0; pre_Y = 0; } //------------------------------------------------------------------- void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { //清除上次畫的 TheBitmap->PixelFormat = pf24bit; TheBitmap->Canvas->Pen->Width = 2; Image1->Canvas->Pen->Style = psDot; TheBitmap->Canvas->Pen->Color = clRed; TheBitmap->Canvas->Brush->Style=bsClear; Form1->Caption ="X=" IntToStr(X) " Y=" IntToStr(Y); SetROP2(TheBitmap->Canvas->Pen,R2_XORPEN); //Image1->Canvas->Pen->Mode = pmNotXor; TheBitmap->Canvas->MoveTo(pre_X,0); TheBitmap->Canvas->LineTo(pre_X,TheBitmap->Height); TheBitmap->Canvas->MoveTo(0,pre_Y); TheBitmap->Canvas->LineTo(TheBitmap->Width ,pre_Y); //開始畫 TheBitmap->Canvas->Draw(0,0,OrgBitmap); TheBitmap->Canvas->MoveTo(X,0); TheBitmap->Canvas->LineTo(X,TheBitmap->Height); TheBitmap->Canvas->MoveTo(0,Y); TheBitmap->Canvas->LineTo(TheBitmap->Width ,Y); //紀錄位置作為下次清除使用 pre_X = X; pre_Y = Y; }供大家參考 bcb新手上路 請多指教 發表人 - wen142 於 2004/12/21 20:26:39 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |