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

請問大家如何將灰階值秀在richedit上

尚未結案
jim006
一般會員


發表:22
回覆:25
積分:9
註冊:2004-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-03 10:29:46 IP:140.134.xxx.xxx 未訂閱
小弟想把影像的灰階值 秀在richedit1...但秀出來的結果不要只以一列的方式顯示, 希望在richedit1顯示出該影像中的行列元素. ex: 500*500的影像 在richedit1也能秀出500*500的灰階值分佈. 而我的作法就是先把一張彩色影像做灰階處理,在來將每點的灰階值存入一個2維矩陣中,但我不知怎麼 控制迴圈 將 矩陣中的元素透過richedit1秀出其原影像灰階影像的分怖.... 煩請知道的高手們...可教教小弟我....感激不盡^^"
arisaka_matsuri
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-03 11:18:00 IP:140.121.xxx.xxx 未訂閱
jim006 你好: 這可能是你要的~
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Graphics::TBitmap *BMP = new Graphics::TBitmap();
  // 開啟圖檔
  if(OpenPictureDialog1->Execute())
    BMP->LoadFromFile(OpenPictureDialog1->FileName);      Byte *ptr;
  AnsiString str;
  for(int r = 0; r < BMP->Height; r  )
  {
    ptr = (Byte *)BMP->ScanLine[r];
    str = ""; // 一定要「歸零」喔
    for(int c = 0; c < BMP->Width; c  )
      str  = AnsiString().sprintf("X ", ptr[c]);
    
    // 把一列的數值丟到 RichEdit 中
    RichEdit1->Lines->Add(str);
  }      delete BMP;
}
範例用了 Button1, RichEdit1, OpenPictureDialog1。如果你要將你的陣列顯示出來,請將迴圈中的 ptr[c] 改成 YourArray[r][c] 之類的就可以了。用 AnsiString().sprintf("X "... 的原因是這樣比較好對齊。還有,RichEdit的ScrollBar屬性要設為ssBoth,WordWarp屬性設為false,Font設為「細明體,9pt」,保證滿意~ 發表人 -
jim006
一般會員


發表:22
回覆:25
積分:9
註冊:2004-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-04 11:25:59 IP:140.134.xxx.xxx 未訂閱
arisaka_matsuri您好: 謝謝大大指導,小弟有將您的程式run過,相當的滿意,而小弟想煩請大大指教2個問題. 1. 假設我的矩陣有3個...那我要如何將它秀在同一個RichEdit1上呢?? 2. 您的程式所顯示的是16進制的...要如何顯示10進制的呢...如果轉成10進制 那各元素間還能對齊嗎???
arisaka_matsuri
高階會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-04 12:05:29 IP:140.121.xxx.xxx 未訂閱
jim006 你好: 1. 若是24bpp的圖或是3個陣列,那就看你要怎樣安排了。
  Byte *ptr;
  AnsiString str;
  for(int b = 0; b < 3; b  ){ //------------(1)
  for(int r = 0; r < BMP->Height; r  )
  {
    ptr = (Byte *)BMP->ScanLine[r];
    str = ""; // 一定要「歸零」喔
    for(int c = 0; c < BMP->Width; c  )
      for(int b = 0; b < 3; b  ) //------------(2)
        str  = AnsiString().sprintf("X ", ptr[c*3 b]);
    
    // 把一列的數值丟到 RichEdit 中
    RichEdit1->Lines->Add(str);
  }
  }
第一種的結果:
B B B B B ...
B B B B B ...
B B B B B ...
G G G G G ...
G G G G G ...
G G G G G ...
R R R R R ...
R R R R R ...
R R R R R ...    第二種的結果:
B G R B G R B G R ...
B G R B G R B G R ...
B G R B G R B G R ...
2. 顯示10進制的,修改如下,還是可以對齊
str  = AnsiString().sprintf("%3d ", ptr[c]);
就醬啦~
jim006
一般會員


發表:22
回覆:25
積分:9
註冊:2004-01-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-04 20:56:36 IP:140.134.xxx.xxx 未訂閱
arisaka_matsuri您好:        經過您的指導,小弟如期所願的將自己的問題解決了,當然您的功勞是最大的,而小弟今天所發問的題一(我的問法可能錯誤所以造成您在思微上有些出路):    ex 我現在有 甲班 乙班 丙班(各各獨立的矩陣)  的學生名單 ,我現在想做的     是將甲班乙班丙班 顯示在一張白紙上(richedit).....希望您能了解我的意    思......tks 
arisaka_matsuri
高階會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-04 22:34:21 IP:218.166.xxx.xxx 未訂閱
引言: ex 我現在有 甲班 乙班 丙班(各各獨立的矩陣) 的學生名單 ,我現在想做的 是將甲班乙班丙班 顯示在一張白紙上(richedit).....希望您能了解我的意 思......tks < face="Verdana, Arial, Helvetica"> 嗯~~我想這應該不難。可以將輸出RichEdit的部分寫成函式,然後將每一個陣列丟進去就好。比如顯示灰階值來說,
void __fastcall ShowGrayBitmapOnRichEdit(Graphics::TBitmap *BMP)
{
  Byte *ptr;
  AnsiString str;
  for(int r = 0; r < BMP->Height; r  )
  {
    ptr = (Byte *)BMP->ScanLine[r];
    str = "";
    for(int c = 0; c < BMP->Width; c  )
      str  = AnsiString().sprintf("X ", ptr[c]);
    RichEdit1->Lines->Add(str);
  }
  RichEdit1->Lines->Add(""); // 空一列,以資區別
}
然後
ShowGrayBitmapOnRichEdit(BMP1);
ShowGrayBitmapOnRichEdit(BMP2);
...
應該沒錯吧~ 當然還有別的方法,你可以再想想看~
tzeyang
一般會員


發表:4
回覆:4
積分:1
註冊:2005-03-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-08 00:53:07 IP:211.76.xxx.xxx 未訂閱
arisaka_matsuri 你好: 是不是可以請你說明一下程式碼呢,我是新手剛接觸這個沒有很久的時間,不知道是不是可以說明一下 Byte *ptr; AnsiString str; for(int r = 0; r < BMP->Height; r ) { ptr = (Byte *)BMP->ScanLine[r]; str = ""; // 一定要「歸零」喔 for(int c = 0; c < BMP->Width; c ) str = AnsiString().sprintf("X ", ptr[c]); // 把一列的數值丟到 RichEdit 中 RichEdit1->Lines->Add(str); } delete BMP; 主要是什麼意思 謝謝
tzeyang
一般會員


發表:4
回覆:4
積分:1
註冊:2005-03-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-13 14:41:02 IP:211.76.xxx.xxx 未訂閱
請問我該如何把灰階值以N個4*4的陣列的方式列出 我用迴圈可是出現一個我看不太懂的錯誤訊習 num[1] 01 02 03 40 85 60 04 08 20 10 30 12 36 14 25 22 num[2] 05 02 03 55 85 60 04 66 20 10 88 12 36 41 25 22 num[3] 01 47 03 40 11 60 04 08 20 10 30 75 36 14 15 22 . . . num[N] 01 02 03 40 85 60 04 08 20 10 30 12 36 14 25 22 發表人 - tzeyang 於 2005/04/13 14:42:52
系統時間:2024-05-12 23:59:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!