全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1154
推到 Plurk!
推到 Facebook!

如何將區分出來的顏色區塊紀錄下來??

答題得分者是:JerryKuo
jun306
一般會員


發表:4
回覆:3
積分:1
註冊:2003-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-13 02:41:13 IP:218.170.xxx.xxx 未訂閱
假設如上圖 "我試了之前的文章" 已經可以抓出分別的顏色區塊.. 但是要怎麼紀錄下來呢?? 我試過用矩陣分成p[x][y]=1,p[x][y]=2,p[x][y]=3,p[x][y]=4 其中1(黃色),2(紅色),3(綠色),4(橘色)當作索引值 但是執行時好像爆掉了,出現以下訊息 message:'access violation at 0x77f8a979:read of address 0x00000009'. Process Stopped. Use Step or Run to comtinue. 請問各位高手該怎麼辦呢??或是有別的方法?? 新手上路請多包含!! 發表人 - jun306 於 2003/11/13 13:59:31
JerryKuo
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-13 08:53:52 IP:61.230.xxx.xxx 未訂閱
你好: 方便請你把程式碼放上來,這樣比較好幫你找出問題 謝謝
jun306
一般會員


發表:4
回覆:3
積分:1
註冊:2003-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-13 13:18:52 IP:218.170.xxx.xxx 未訂閱
我試了之前的文章... 加上我的想法... 請各位高手幫忙看看...謝謝!!
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int p2[250][250];
Graphics::TBitmap* BMP = new Graphics::TBitmap();
Byte *ptr;
BMP->Assign(Image1->Picture->Bitmap );
for (int y=0;yHeight ;y  )
{
   ptr=(Byte*)BMP->ScanLine[y];
   for (int x=0;xWidth ;x  )
   {
     if (ptr[x*3 2]==255&&ptr[x*3 1]==255&&ptr[x*3]==0) //yellow = 1
     {
        p2[x][y]=1;
        ptr[x*3]=ptr[x*3 1]=ptr[x*3 2]=255;
     }
     else if (ptr[x*3 2]==255&&ptr[x*3 1]==0&&ptr[x*3]==0) //red = 2
     {
        p2[x][y]=2;
        ptr[x*3]=ptr[x*3 1]=ptr[x*3 2]=255;
     }
     else if (ptr[x*3 2]==0&&ptr[x*3 1]==128&&ptr[x*3]==0) //green = 3
     {
        p2[x][y]=3;
        ptr[x*3]=ptr[x*3 1]=ptr[x*3 2]=255;
     }
     else if (ptr[x*3 2]==255&&ptr[x*3 1]==128&&ptr[x*3]==64)//orange = 4
     {
         p2[x][y]=4;
         ptr[x*3]=ptr[x*3 1]=ptr[x*3 2]=255;
     }
     else
     {
         p2[x][y]=5;   //others
         ptr[x*3]=ptr[x*3 1]=ptr[x*3 2]=0;
     }
     }
     }
        Image2->Picture->Assign(BMP);
        delete BMP;
}
 
這是我第一次用bcb寫程式...有很多地方不懂得...請多多指教!! 感謝回應!! 新手上路請多包含!! 發表人 - jun306 於 2003/11/13 14:03:24
JerryKuo
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-13 14:04:54 IP:61.230.xxx.xxx 未訂閱
你好:    1.)圖片大小,根據你上傳的圖片大小為320x240,卻宣告p2[250][250] 去紀錄搜尋結果,執行的話一定會有問題,應該改為p2[320][240]或是用 動態陣列宣告。   
unsigned char** p2;    p2 = new unsigned char*[BMP->Height];
  for ( y = 0; y < BMP->Height; y  )
  {
     p2[y] = new unsigned char[BMP->Width];         for ( x = 0; x < BMP->Width; x  )
     {
        p2[y][x]= 0;
     }
  }
2.)不知道是不是貼程式的問題,還是本來就沒有寫好?
for (int y=0; yHeight ;y  )    這樣會進入無窮迴圈 
{
  for (int x=0;xWidth ;x  )    這樣會進入無窮迴圈 
  {      }
}
發表人 - jerrykuo 於 2003/11/13 14:11:21
jun306
一般會員


發表:4
回覆:3
積分:1
註冊:2003-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-13 14:35:02 IP:218.170.xxx.xxx 未訂閱
試了一下改成p2[320][240] 就可以了ㄝ.... 真是太感謝了...謝謝JerryKuo!! 新手上路請多包含!!
系統時間:2024-05-06 9:07:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!