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

請問如何在delphi中讀取bmp檔案中的每個點RGB值及存放在txt中?

尚未結案
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-28 02:14:08 IP:202.175.xxx.xxx 未訂閱
請問如何在delphi中讀取bmp檔案中的每個點RGB值? 1.如何載入bmp圖檔? 2.如何讀取bmp檔案中的每點rgb值? 3.如何將得出的rgb值存放在txt檔案中? 4.另外,txt檔案的最大存量是多少呢? 謝謝各方delphi愛好者的協助?感激不盡 平常心活著
------
平常心活著
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-28 09:12:27 IP:61.62.xxx.xxx 未訂閱
jl, 你好    類似的問題在站內有很多討論,可以先搜尋相關的文章。 1.如何載入bmp圖檔?   先在 Form 上放置一個 Image -- Image1.Picture.LoadFromFile('d:\test.bmp');    2.如何讀取bmp檔案中的每點rgb值?  (其實方法很多)
   var c:TColor;
   r,g,b:BYTE;       c:= Image1.Picture.Bitmap.Canvas.Pixels[i,j];
   r:=GetRValue(c);
   g:=GetGValue(c);
   b:=GetBValue(c);
 
3.如何將得出的rgb值存放在txt檔案中? 開一個檔案,利用相關功能去做檔案的寫入動作即可,Help 中有相當多的說明。 我也在努力學習中 ^ ^ 發表人 - adonis 於 2004/02/28 09:14:50 發表人 - adonis 於 2004/02/28 09:16:12
------
我也在努力學習中,若有錯謬請見諒。
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-28 10:09:42 IP:202.175.xxx.xxx 未訂閱
引言: jl, 你好 類似的問題在站內有很多討論,可以先搜尋相關的文章。 1.如何載入bmp圖檔? 先在 Form 上放置一個 Image -- Image1.Picture.LoadFromFile('d:\test.bmp'); 2.如何讀取bmp檔案中的每點rgb值? (其實方法很多)
   var c:TColor;
   r,g,b:BYTE;       c:= Image1.Picture.Bitmap.Canvas.Pixels[i,j];
   r:=GetRValue(c);
   g:=GetGValue(c);
   b:=GetBValue(c);
 
3.如何將得出的rgb值存放在txt檔案中? 開一個檔案,利用相關功能去做檔案的寫入動作即可,Help 中有相當多的說明。 我也在努力學習中 ^ ^ 發表人 - adonis 於 2004/02/28 09:14:50 發表人 - adonis 於 2004/02/28 09:16:12
To: Adonis 非常感謝你的幫助。 From:jl 平常心活著
------
平常心活著
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-28 10:09:56 IP:202.175.xxx.xxx 未訂閱
引言: jl, 你好 類似的問題在站內有很多討論,可以先搜尋相關的文章。 1.如何載入bmp圖檔? 先在 Form 上放置一個 Image -- Image1.Picture.LoadFromFile('d:\test.bmp'); 2.如何讀取bmp檔案中的每點rgb值? (其實方法很多)
   var c:TColor;
   r,g,b:BYTE;       c:= Image1.Picture.Bitmap.Canvas.Pixels[i,j];
   r:=GetRValue(c);
   g:=GetGValue(c);
   b:=GetBValue(c);
 
3.如何將得出的rgb值存放在txt檔案中? 開一個檔案,利用相關功能去做檔案的寫入動作即可,Help 中有相當多的說明。 我也在努力學習中 ^ ^ 發表人 - adonis 於 2004/02/28 09:14:50 發表人 - adonis 於 2004/02/28 09:16:12
To: Adonis 非常感謝你的幫助。 From:jl 平常心活著
------
平常心活著
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-28 10:10:10 IP:202.175.xxx.xxx 未訂閱
引言: jl, 你好 類似的問題在站內有很多討論,可以先搜尋相關的文章。 1.如何載入bmp圖檔? 先在 Form 上放置一個 Image -- Image1.Picture.LoadFromFile('d:\test.bmp'); 2.如何讀取bmp檔案中的每點rgb值? (其實方法很多)
   var c:TColor;
   r,g,b:BYTE;       c:= Image1.Picture.Bitmap.Canvas.Pixels[i,j];
   r:=GetRValue(c);
   g:=GetGValue(c);
   b:=GetBValue(c);
 
3.如何將得出的rgb值存放在txt檔案中? 開一個檔案,利用相關功能去做檔案的寫入動作即可,Help 中有相當多的說明。 我也在努力學習中 ^ ^ 發表人 - adonis 於 2004/02/28 09:14:50 發表人 - adonis 於 2004/02/28 09:16:12
To: Adonis 非常感謝你的幫助。 From:jl 平常心活著
------
平常心活著
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-28 23:40:39 IP:218.18.xxx.xxx 未訂閱
讀進圖片的方法有解答了,就不再重述。 至於讀圖坐標點的顏色方法,用CANVAS.PIXELS可不太好,因為真的速度很糟,要用就用SCANLINE,那速度真的會快上數十倍~因為SCANLINE是直接記憶体讀取,所以速度就真的會有所差異,不過要用SCANLINE,就得要有點記憶体指標使用經驗,不然會手忙腳亂的啦 至於TXT檔的大小限制,受限於作業系統及程式,一般來講可以到4GB,不過~~我想不出為什麼會用TXT檔來存圖~~~~~是想做文字圖嗎?
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-29 17:54:25 IP:202.175.xxx.xxx 未訂閱
引言: 讀進圖片的方法有解答了,就不再重述。 至於讀圖坐標點的顏色方法,用CANVAS.PIXELS可不太好,因為真的速度很糟,要用就用SCANLINE,那速度真的會快上數十倍~因為SCANLINE是直接記憶体讀取,所以速度就真的會有所差異,不過要用SCANLINE,就得要有點記憶体指標使用經驗,不然會手忙腳亂的啦 至於TXT檔的大小限制,受限於作業系統及程式,一般來講可以到4GB,不過~~我想不出為什麼會用TXT檔來存圖~~~~~是想做文字圖嗎? < face="Verdana, Arial, Helvetica"> To:japhenchen 謝謝你的解答,另外,如果用scanline的話,有甚麼例子可以參考呢? 還有,scanline是否在圖片中逐點讀取呢? From:jl 平常心活著
------
平常心活著
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-29 19:47:20 IP:61.62.xxx.xxx 未訂閱
jl,你好    若是你對指標的使用熟悉的話,下面這段 Code 供你參考。
 
Byte *ptr;
int r,g,b;
int gray;
int i,j;
Bmp->Assign(Image1->Picture->Bitmap);
 for(j=0;jHeight;j  )
 {
  ptr = (Byte *)Bmp->ScanLine[j];
  for(i=0;iWidth;i  )
  {
   b=ptr[i*3];
   g=ptr[i*3 1];
   r=ptr[i*3 2];
   .
   .
   .
   
  }
 }
分別讀出來的 r, g, b 就可以依你先前的希望存到txt檔中囉。 我也在努力學習中 ^^
------
我也在努力學習中,若有錯謬請見諒。
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-06 19:22:15 IP:202.175.xxx.xxx 未訂閱
引言: jl,你好 若是你對指標的使用熟悉的話,下面這段 Code 供你參考。
 
Byte *ptr;
int r,g,b;
int gray;
int i,j;
Bmp->Assign(Image1->Picture->Bitmap);
 for(j=0;jHeight;j  )
 {
  ptr = (Byte *)Bmp->ScanLine[j];
  for(i=0;iWidth;i  )
  {
   b=ptr[i*3];
   g=ptr[i*3 1];
   r=ptr[i*3 2];
   .
   .
   .
   
  }
 }
分別讀出來的 r, g, b 就可以依你先前的希望存到txt檔中囉。 我也在努力學習中 ^^ To:adonis 您妳,先感謝您的回覆,但我未用過指標,一般我只會用數組,所以對此我感到有點困難;另外,看coding好像似c語言,在delphi能用這樣的寫法嗎?(因為我是初學者,所以才有此疑問)。 謝謝回覆 From : jl
平常心活著
------
平常心活著
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-07 14:03:10 IP:61.64.xxx.xxx 未訂閱
jl, 你好    用delphi當然也可以辦得到。  
var 
X, Y: Integer;
r, g, b: Byte; 
PRGB: pRGBTriple;
begin
  for Y := 0 to (Bitmap.Height - 1) do
    begin
      PRGB := Bitmap.ScanLine[Y];
      for X := 0 to (Bitmap.Width - 1) do
        begin
          r := PRGB^.rgbtRed;
          g := PRGB^.rgbtGreen;
          b := PRGB^.rgbtBlue;
          Inc(PRGB);
          .
          .
          .
          //可以寫入到你所要的文字檔
        end;
    end;
end;
 
參考看看。 我也在努力學習中 ^ ^
------
我也在努力學習中,若有錯謬請見諒。
favinc
一般會員


發表:22
回覆:19
積分:8
註冊:2003-03-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-09 14:02:46 IP:211.147.xxx.xxx 未訂閱
D6有一个函式ColorToString,可将颜色值转换为字符,如前所述,str := ColorToString(..Canvas.Pixels[i,j]); 兵临城下,快活如故。
------
兵临城下,快活如故。
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-03-20 00:20:55 IP:202.175.xxx.xxx 未訂閱
感謝各位大大的衷心解答,就此答謝解答過此題的所有有心的人。 jl 願你們能再繼續幫助有需要的人。 平常心活著
------
平常心活著
系統時間:2024-05-02 14:19:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!