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

十字線留下殘影的問題

答題得分者是:chris_shieh
wen142
一般會員


發表:22
回覆:27
積分:14
註冊:2004-06-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-21 14:44:28 IP:140.135.xxx.xxx 未訂閱
各位大大您們好 我在彩色影像上面想要做定位的動作 所以採用十字線的方式 我參考了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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-21 16:27:25 IP:219.68.xxx.xxx 未訂閱
[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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-21 17:04:29 IP:140.135.xxx.xxx 未訂閱
感謝chris_shieh大大的回應 可是我採用您的方法之後 產生的結果依然是相同沒有改善 不知道是哪裡出問題耶 bcb新手上路 請多指教
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-21 17:08:22 IP:220.135.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-21 17:52:49 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-21 20:24:33 IP:140.135.xxx.xxx 未訂閱
對不起兩位大大 我重新把你們建議的程式碼做測試 發現將兩位的想法放在一起用 效果還不錯
 

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
系統時間:2024-05-21 0:23:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!