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

繪出在Image的圖形被翻轉了

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


發表:8
回覆:8
積分:3
註冊:2004-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-24 09:37:10 IP:61.222.xxx.xxx 未訂閱
小弟在一張Image上搜尋圓的位置, 然後將找到的位置塗上顏色。 如果用Pixels[i][j]的方式的話,都沒有問題。但速度太慢了。 所以改用ScanLine的方式,但ScanLine的方式繪出來的方向郤不對。 以下是我的SourceCode
 
unsigned char *ptr;
for(i = 0; i < Height; i++)
{
ptr = (unsigned char*)(HeightImage->Picture->Bitmap->ScanLine[i]);
for(j = 0; j < Width; j++)
{
r = lab[i*Width+j];
if (r == i*Width+j)
{
LabImg[i*Width+j] = curlab;
lab[i*Width+j] = curlab++;
}
else
{
lab[i*Width+j] = lab[r];
LabImg[i*Width+j] = lab[r];
}    if (LabImg[i*Width+j] != 0)
{
Record_I.push_back(i);
Record_J.push_back(j);
//======== draw all data comform with what we need
#ifdef draw_all_bump_label
ptr[j*3] = LabImg[i*Width+j];
ptr[j*3+1] = LabImg[i*Width+j]/2;
ptr[j*3+2] = LabImg[i*Width+j]/4;
//HeightImage->Canvas->Pixels[i][j]=(TColor)RGB(LabImg[i*Width+j],LabImg[i*Width+j]/2,LabImg[i*Width+j]/4);
#endif
}
}//end for j
}//end for i
HeightImage->Update();
附圖是利用ScanLine作出來,但方向不對。Search過有關ScanLine的用法, 應該也沒錯。真是奇怪了。 發表人 - iq 於 2005/03/24 10:05:38
JerryKuo
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-24 09:53:28 IP:220.135.xxx.xxx 未訂閱
引言: 小弟在一張Image上搜尋圓的位置, 然後將找到的位置塗上顏色。 如果用Pixels[i][j]的方式的話,都沒有問題。但速度太慢了。 所以改用ScanLine的方式,但ScanLine的方式繪出來的方向郤不對。 以下是我的SourceCode
 
unsigned char * ptr;
for(i = 0; i < Height; i  )
{
  ptr = (unsigned char*)(HeightImage->Picture->Bitmap->ScanLine[i]);
   for(j = 0; j < Width; j  )
   {
          ptr[j*3] = clRed;
          ptr[j*3 1] = clRed;
          ptr[j*3 2] = clRed;
          //HeightImage->Canvas->Pixels[i][j]=clRed;      
   }//end for j
}//end for i
iq你好: 你的圖好像跟你的程式沒有關係,程式只是把圖塗成紅色的而已。
iq
一般會員


發表:8
回覆:8
積分:3
註冊:2004-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-24 10:10:24 IP:61.222.xxx.xxx 未訂閱
引言:
引言: 小弟在一張Image上搜尋圓的位置, 然後將找到的位置塗上顏色。 如果用Pixels[i][j]的方式的話,都沒有問題。但速度太慢了。 所以改用ScanLine的方式,但ScanLine的方式繪出來的方向郤不對。 以下是我的SourceCode
 
unsigned char * ptr;
for(i = 0; i < Height; i  )
{
  ptr = (unsigned char*)(HeightImage->Picture->Bitmap->ScanLine[i]);
   for(j = 0; j < Width; j  )
   {
          ptr[j*3] = clRed;
          ptr[j*3 1] = clRed;
          ptr[j*3 2] = clRed;
          //HeightImage->Canvas->Pixels[i][j]=clRed;      
   }//end for j
}//end for i
iq你好: 你的圖好像跟你的程式沒有關係,程式只是把圖塗成紅色的而已。
沒有表達清楚不好意思,重新修正SourceCode的部份。 這個部份的程式,只是將我找到的"圓"上色而以。 如果我利Pixel的方式上色,那麼上色的"圓"位置就會正確。 但如果用ScanLine的方式,那麼就會像所附的圖一樣,角度不會 小弟的感覺像是 x, y互換了,但是不知道該怎麼轉回來。
JerryKuo
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-24 10:22:31 IP:220.135.xxx.xxx 未訂閱
引言: 沒有表達清楚不好意思,重新修正SourceCode的部份。 這個部份的程式,只是將我找到的"圓"上色而以。 如果我利Pixel的方式上色,那麼上色的"圓"位置就會正確。 但如果用ScanLine的方式,那麼就會像所附的圖一樣,角度不會 小弟的感覺像是 x, y互換了,但是不知道該怎麼轉回來。
iq你好: 我倒覺得你用pixel上色的結果是錯的,為什麼會這麼說呢? 原因就是你設定i和j相對於座標系統是y和x 所以HeightImage->Canvas->Pixels[i][j]就等於 HeightImage->Canvas->Pixels[y][x] 但事實上Pixels相對座標系統應該是Pixels[X][Y]。 你用scanline做的方向是對的,反而用pixel是錯了。
iq
一般會員


發表:8
回覆:8
積分:3
註冊:2004-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-24 11:17:49 IP:61.222.xxx.xxx 未訂閱
引言:
引言: 沒有表達清楚不好意思,重新修正SourceCode的部份。 這個部份的程式,只是將我找到的"圓"上色而以。 如果我利Pixel的方式上色,那麼上色的"圓"位置就會正確。 但如果用ScanLine的方式,那麼就會像所附的圖一樣,角度不會 小弟的感覺像是 x, y互換了,但是不知道該怎麼轉回來。
iq你好: 我倒覺得你用pixel上色的結果是錯的,為什麼會這麼說呢? 原因就是你設定i和j相對於座標系統是y和x 所以HeightImage->Canvas->Pixels[i][j]就等於 HeightImage->Canvas->Pixels[y][x] 但事實上Pixels相對座標系統應該是Pixels[X][Y]。 你用scanline做的方向是對的,反而用pixel是錯了。
感謝版本, 您說的沒錯,得確是pixel不對,但我要的方向確是不對的那一個。 到底問題出在哪?我再來檢查一下。 感謝您。我發現問題跟本不是出在ScanLine的部份,感謝您的提醒。 再次感謝。 發表人 - iq 於 2005/03/24 11:37:08
系統時間:2024-05-02 12:53:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!