我正在嘗試讀取PGM二進制文件(http://netpbm.sourceforge.net/doc/pgm.html)以填充基於0的整數二維矩陣(16位灰度值)。如何使用TStream填充整數矩陣
該文件可能是50兆,所以我試圖在一個調用中填充緩衝區。
我以前從來沒有對Streams做過任何事情,但Google的Delphi結果流可以追溯到20年前,並且是一個混亂的混亂,我無法找到自己的方式。
我已經成功地鎖定了德爾福(第一次是15年!)在運行使用指針和緩衝區的一些代碼(也可能是基於我的陳舊做法的誤解。)
這裏是我的僞代碼,按整數整數。有沒有辦法通過單個Stream調用來讀取和填充矩陣? (假設該文件在同一臺機器上創建的,所以字節性是一樣的。)
type
TMatrix: Array of Array of Integer;
procedure ReadMatrix(const AFileName: String;
const AStartingByte: Integer;
const AMaxRow: Integer;
const AMaxCol: Integer;
const AMatrix: TMatrix)
begin
SetLength(AMatrix, aMaxRow, aMaxCol);
Open(AFileName);
Seek(AStartingByte);
for Row := 0 to aMaxCol do
for Col := 0 to aMaxCol do
AMatrix[Row, Col] := ReadWord
end;
而且,不,這不是一個家庭作業! :-)
你的問題,你將不能夠在「一次調用」中用單或雙(取決於'Maxval'值)字節像素強度值填充二維整數數組。但爲什麼中間數組呢?你不想創建一個'TGraphic'後代和數據存儲器,例如作爲一個扁平的字節緩衝區(和索引像素在掃描線方式)? – Victoria
爲什麼你需要在一次通話中完成這項工作?這將是可能的,但不是爲2d動態數組。您可以使用1d動態數組,然後執行自己的索引。 –