關於bmp圖像像素讀入二維數組的問題? |
尚未結案
|
jl
一般會員 發表:17 回覆:34 積分:10 註冊:2004-02-28 發送簡訊給我 |
|
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
有..
假如是使用Stream的話.RGB要自己讀..例如24位元..就是BGRBGRBGR...
不會比使用Tbitmap快..
Tbitmap配合SCANLINE..可以很快的把直丟到陣列裡
既然尼說不使用IMAGE..那我想Tbitmap是最佳的解決方案
type TRGB=record //0~255 B:byte; G:byte; R:byte; end; var input:Tbitmap; i:integer; RGB:array of array of TRGB; begin input:=Tbitmap.Create; input.LoadFromFile('a.bmp'); setlength(RGB,input.height,input.width); for i:=0 to input.height-1 do RGB[i]:= image.ScanLine[i]; end;這時..RGB就是一個內函R..G..B..3個屬性的二維陣列了 RGB[列][行] 發表人 - geniustom 於 2004/03/26 00:41:32 |
jl
一般會員 發表:17 回覆:34 積分:10 註冊:2004-02-28 發送簡訊給我 |
To:geniustom
先感謝您的回答,但尚有少許問題未能解決
1.RGB[列][行],是指橫列直行嗎?
2.若在宣告時不用TYPE TRGB=record
R:TByte
G:TByte
B:TByte
能否用RGB : array [1..max,1..3] of byte代替嗎? //max = 10000;
1..max--->陣列位置
1..3----->代表r.g.b的值 而RGB[列][行]的位置時,怎樣寫才可取得r.g.b的值呢? jl:仍在努力中 平常心活著
------
平常心活著 |
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
1.YES 2.RGB : array [1..max,1..3] of byte代替嗎? //max = 10000; 這有幾個缺點 1.您只指定一個MAX..圖是二維的..您還要做一維轉二維的轉換 2.您用靜態配置的方式..假如今天不知道圖的大小.. 您的MAX若過多..浪費記憶體..過少..程式會錯誤 3.記憶體本身是一維的..要配合指標的位移..才能把一維轉二維因為看了您先前的文章..您不熟指標 所以我才這麼寫..這樣才能讓您早點懂 4.不寫TRGB也可行..不過必須要把它弄成三維陣列才方便使用..否則我想您會被搞混了 例如 RGB :array of array of array[1..3] of byte; 才行 RGB[1][2][3]:=0就代表第一列第2行的紅色=0 我把我的程式再做更多的註解.. type TRGB=record //這是定義一個結構..由於在記憶體中是BGR的排列.. B:byte; //所以一定要這樣宣告.. G:byte; R:byte; end; var input:Tbitmap; i:integer; RGB:array of array of TRGB; //在這邊..array of array of TRGB..就是宣告一個二維陣列.. //每個陣列的元素都是一個TRGB..每個TRGB各占3BYTES begin input:=Tbitmap.Create; input.LoadFromFile('a.bmp'); //以上是讀圖.. setlength(RGB,input.height,input.width); //setlength是動態宣告陣列的大小..這邊是宣告這個陣列的大小為height列..width行 for i:=0 to input.height-1 do RGB[i]:= image.ScanLine[i]; //image.ScanLine[i]就是一次讀一列的TRGB到記憶體中..因為它是一次讀出一列的值 //所以只要用一個迴圈來寫就好 //-----------------------以上就讀圖完成了------------------------- RGB[1][2].R=255; RGB[1][2].G=0; RGB[1][2].B=0; //以上就是把那張圖的第一列第二行那個點變成純紅色 end;結論...說了這麼多..如果不用指標..這應該是把圖讀到二元陣列的最佳方法了..我定義那個結構只是 讓您了解讀取圖檔的方法..而且使用也很方便...例如.RGB[列][行].R 希望您可以先仔細研究後再發問... GOOD LUCK |
jl
一般會員 發表:17 回覆:34 積分:10 註冊:2004-02-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |