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

請教把pixel值傳到矩陣中

尚未結案
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-23 07:53:57 IP:218.163.xxx.xxx 未訂閱
請教一下 我要把一張512*512的灰階影像的pixel值讀出來後 放到一個p[512][512]的陣列中 我的程式碼如下 不知道是什麼問題 是不是謝錯了 謝謝 Graphics::TBitmap *Bmp1=new Graphics::TBitmap();                  Bmp1->Assign(Image1->Picture->Bitmap);            for(int j=0;j<512;j ) for(int i=0;i<512;i ) p[i][j]=Bmp1->Canvas->Pixels[i][j]; 發表人 - taishyang 於 2004/07/23 13:08:23
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-23 14:11:04 IP:211.76.xxx.xxx 未訂閱
pork 您好:     
引言: Graphics::TBitmap *Bmp1=new Graphics::TBitmap(); Bmp1->Assign(Image1->Picture->Bitmap); for(int j=0;j<512;j ) for(int i=0;i<512;i ) p[i][j]=Bmp1->Canvas->Pixels[i][j];
首先說明一下Bmp1->Canvas->Pixels[i][j]傳回的是TColor型態的資料,但文中您並未提到p[i][j]的資料型態,不曉得是不是問題所在? 因為灰階圖形上任一點R,G,B的值均相同,所以在此假設p[i][j]的型態是unsigned char或int, 所以可透過下列方式取得RGB的顏色值:(以取得R的值為例) p[i][j] = GetRValue( Bmp1->Canvas->Pixels[i][j] ); 希望是您要的。 RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-24 07:24:24 IP:218.163.xxx.xxx 未訂閱
感謝您 請問一下 灰階值不是都在256以內嗎 用p[i][j]=Bmp1->Canvas->Pixels[i][j]; 所取到的值怎麼都很大->8092539,7763574...... 我是新手觀念還很模糊 煩請指教 是不是有相關的書可以參考 謝謝
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-24 13:51:22 IP:218.166.xxx.xxx 未訂閱
Dear pork:
引言: 灰階值不是都在256以內嗎 用p[i][j]=Bmp1->Canvas->Pixels[i][j]; 所取到的值怎麼都很大->8092539,7763574......
這部分建議直接參考 BCB 中 TColor type 的說明。
引言: If you specify TColor as a specific 4-byte hexadecimal number instead of using the constants defined in the Graphics unit, the low three bytes represent RGB color intensities for blue, green, and red, respectively. The value 0x00FF0000 represents full-intensity, pure blue, 0x0000FF00 is pure green, and 0x000000FF is pure red. 0x00000000 is black and 0x00FFFFFF is white.
因為TColor型別包含RGB三個值,而且會被轉型成int(4 bytes),所以才會得到那麼大的整數。
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-24 15:13:48 IP:218.163.xxx.xxx 未訂閱
真謝謝您 請問可以不用TColor型 而讓取到的值是在0-256中間嗎 謝謝
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-25 00:30:47 IP:218.166.xxx.xxx 未訂閱
Dear pork: 如 richtop 兄所提,用 GetRValue(), GetGValue(), GetBValue()這三個巨集即可。其實骨子裡就是把 TColor 代表的 RGB 值拆開來而已,
// 取得Blue值
((BYTE)(Bmp1->Canvas->Pixels[i][j] >> 16));
// 取得Green值
((BYTE)(Bmp1->Canvas->Pixels[i][j] >> 8));
// 取得Red值
((BYTE)(Bmp1->Canvas->Pixels[i][j]));
上述三個巨集可以在 Win32 SDK Help Files 說明檔中查到。
auslk
初階會員


發表:35
回覆:77
積分:32
註冊:2003-02-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-27 12:34:29 IP:61.219.xxx.xxx 未訂閱
您好!     小弟不建議您用 Canvas,因為您速度一定慢 而且慢到你都可以看的到....   建議用ScanLine   請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52638
系統時間:2024-05-21 1:04:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!