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

請問關於圖像複製....

尚未結案
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-03 19:45:46 IP:61.59.xxx.xxx 未訂閱
小弟現在有一張上面有許多黃色橫線的圖片 有些連續的黃色橫線形成一整塊黃色區域 我現在想複製這些零散的黃線以及黃色區域 可是結果怪怪的 似乎黃色區域只要一個以上就會出錯 下面是小弟的結果     一個以上的黃色區域就會出錯... 請大大們幫我解決一下這個問題 小弟有寫上註解,我都寫在當行程式碼的上方 小弟困擾這地方好久了 請大家為我解惑 感謝~
 
void __fastcall TForm1::N22Click(TObject *Sender)
{
 //動態配置兩個BMp
 Graphics::TBitmap *Bmp = new Graphics::TBitmap();
 Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();     //Bmp複製在右邊的Image2 , Bmp1複製在左邊的Image1
 Bmp->Assign(Image2->Picture->Bitmap);
 Bmp1->Assign(Image1->Picture->Bitmap);     //這是一個存座標用的記號
 int start=0;     //此陣列存黃線的開始點 ,hs[i][0]的位置放x座標 ,hs[i][1]的位置放y座標
 int hs[1000][2]={0};     //此陣列存黃線的結束點 ,he[i][0]的位置放x座標 ,he[i][1]的位置放y座標
 int he[1000][2]={0};     //連續的黃線,我就當成一整塊黃色區域,areas[i][0]存黃色區域左上角的x座標,areas[i][1]存黃色區域左上角的y座標
 int areas[10][2]={0};     //連續的黃線,我就當成一整塊黃色區域,areae[i][0]存黃色區域右下角的x座標,areae[i][1]存黃色區域右下角的y座標
 int areae[10][1]={0};     //紀錄我總共有幾條黃線
 int lin=0;     for (int i=0;iHeight;i++ )
 {
  for (int j=0;jWidth; j++ )
  {
   //當start記號等於零,且像素為黃色,我就當這是一條黃線的起點
   if((start==0) && (Bmp->Canvas->Pixels[j][i]==(TColor)clYellow))
   {
     //把start記號設為1,直到我找到這條黃線的結束點
     start=1;         //紀錄黃線起點的x座標
     hs[lin][0]=j;         //紀錄黃線起點的y座標
     hs[lin][1]=i;
   }       //當start記號是1,且當像素不再是黃色時,我就紀錄此點之前的那個座標是個黃線終點
   if((start==1) && (Bmp->Canvas->Pixels[j][i]!=(TColor)clYellow))
   {
     //紀錄此點之前的那個點的x座標
     he[lin][0]=j-1;         //直接紀錄此點的y位址,小弟覺得可能會有點問題...因為我是假設黃線的終點一定不會在Image中的最右邊...
     he[lin][1]=i;         //將start記號重開回零
     start=0;         //當一個黃線終點產生,我就當產生一條黃線,並紀錄黃線個數
     lin++;
   }
  }
 }     //由以上的結果,若是要找第一條黃線的座標 : (hs[0][0],hs[0][1]),第一條黃線的終點 : (he[0][0],he[0][1])     //再次把start記號設為零,接下來是為了紀錄黃色區塊
 start=0;     int fl=0;     //當發生連續的黃線,我就當作是一整塊黃色區域
 for(int i=0;iTransparent = true;
  Bmp2->Transparent = true;
  Bmp2->TransparentColor = Bmp2->Canvas->Pixels[1][1];
  Bmp2->TransparentMode = tmAuto;
  Image2->Transparent = true;     Bmp2->Width   = Image1->Width;
 Bmp2->Height  = Image1->Width;     rect=Rect(areas[i][0],areas[i][1],areae[i][0],areae[i][1]);     Bmp2->Canvas->CopyRect(rect,Bmp1->Canvas,rect);
 }     Image2->Picture->Assign(Bmp2);
 delete Bmp,Bmp1,Bmp2;
}    
JerryKuo
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-04 11:36:35 IP:220.135.xxx.xxx 未訂閱
引言: 小弟現在有一張上面有許多黃色橫線的圖片 有些連續的黃色橫線形成一整塊黃色區域 我現在想複製這些零散的黃線以及黃色區域 可是結果怪怪的 似乎黃色區域只要一個以上就會出錯 請大大們幫我解決一下這個問題 小弟有寫上註解,我都寫在當行程式碼的上方 小弟困擾這地方好久了 請大家為我解惑 感謝~
 
 //此陣列存黃線的開始點 ,hs[i][0]的位置放x座標 ,hs[i][1]的位置放y座標
 int hs[1000][2]={0};     //此陣列存黃線的結束點 ,he[i][0]的位置放x座標 ,he[i][1]的位置放y座標
 int he[1000][2]={0};     //連續的黃線,我就當成一整塊黃色區域,areas[i][0]存黃色區域左上角的x座標,areas[i][1]存黃色區域左上角的y座標
 int areas[10][2]={0};

 //連續的黃線,我就當成一整塊黃色區域,areae[i][0]存黃色區域右下角的x座標,areae[i][1]存黃色區域右下角的y座標
 int areae[10][1]={0};    
本來以為又遇到靈異現象,真是太神奇了,居然結束點會自己變動, 試了半天,終於找到為什麼了。原因是上面藍色那一行。 應該是兩個座標的(x,y),應該是小筆誤造成的吧 //連續的黃線,我就當成一整塊黃色區域,areae[i][0]存黃色區域右下角的x座 標,areae[i][1]存黃色區域右下角的y座標 int areae[10][2]={0};
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-04 13:13:14 IP:61.59.xxx.xxx 未訂閱
多謝您熱心回應阿! 我一開始也以為是靈異現象說... 一直在看我設areae值的迴圈 原來是錯在一開始的陣列設定阿 大大再次感謝您啦!~ 阿里阿多~
系統時間:2024-06-26 21:55:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!