如何取出區域中的座標 |
缺席
|
keikojason
初階會員 發表:37 回覆:63 積分:45 註冊:2004-05-10 發送簡訊給我 |
以下是我在討論區找的,這是一位前輩的範例;而我是希望用這範例將所搜尋到的區域再取出該區域的"最大值與最小值的座標值SHOW出來"想問問各位前輩可以教教小弟要如何改呢????...不知道要怎樣取出座標值...謝謝 int count=0;
int Connect(Graphics::TBitmap * BMP, int x, int y)
{
count++;
BMP->Canvas->Pixels[x][y] = clBlack;
// 判斷 (x+1,y)
if(BMP->Canvas->Pixels[x + 1][y] == clWhite)
{
Connect(BMP, x + 1, y);
}
// 判斷(x + 1, y - 1)
if(BMP->Canvas->Pixels[x + 1][y - 1] == clWhite)
{
Connect(BMP, x + 1, y - 1);
}
// 判斷 (x+1,y+1)
if(BMP->Canvas->Pixels[x][y - 1] == clWhite)
{
Connect(BMP, x , y - 1);
}
// 判斷 (x,y-1)
if(BMP->Canvas->Pixels[x-1][y - 1] == clWhite)
{
Connect(BMP, x-1, y - 1);
}
// 判斷 (x,y-1)
if(BMP->Canvas->Pixels[x-1][y] == clWhite)
{
Connect(BMP, x-1, y);
}
// 判斷 (x-1,y)
if(BMP->Canvas->Pixels[x - 1][y+1] == clWhite)
{
Connect(BMP, x - 1, y+1);
}
// 判斷 (x-1,y-1)
if(BMP->Canvas->Pixels[x][y + 1] == clWhite)
{
Connect(BMP, x, y + 1);
}
// 判斷 (x+1,y)
if(BMP->Canvas->Pixels[x + 1][y+1] == clWhite)
{
Connect(BMP, x + 1, y+1);
}
// 判斷 (x-1,y+1)
if(BMP->Canvas->Pixels[x + 1][y] == clWhite)
{
Connect(BMP, x + 1, y);
}
return (count);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ int c = 0;
Graphics::TBitmap *BMP = new Graphics::TBitmap();
Byte *ptr=NULL;
BMP->LoadFromFile("1.bmp");
for(int y = 0; y < BMP->Height; y++)
{
ptr = (Byte *) BMP->ScanLine[y];
for(int x = 0; x < BMP->Width; x++)
{
if(ptr[x * 3] == 255)
{ int cx= Connect(BMP, x, y);
Memo1->Lines->Add(cx); 顯示每次計算的結果(物件所佔的像素數)
count=0; //歸0用
if (cx>=3 && cx<=9)
c+=1; //計算物件各數 (可用像素數cx來限制是否累計)
//break;
}
}
}
ShowMessage(c);
delete BMP;
}
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
|
keikojason
初階會員 發表:37 回覆:63 積分:45 註冊:2004-05-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |