バイナリファイルの読み込みにおいて、うまく読み込めたのですが、時間がかかりすぎて困っています。
やりたいことは、一つのバイナリファイルには、8ビットごとに3個データが順に並んでおり、それらを三つの配列にに分割して読み込みたいです。
何かよい方法はありますでしょうか?
ちなみに以下のコードで目的は達成していますが、一つ一つをReadして言っているために速度がどうしても遅いようです。よろしくお願いいたします。
Assignfile(raw_file,filepath);
Reset(raw_file);
Seek (raw_file,start_p);
length:=y_mtx*x_mtx;
n:=0;
while n < length do
begin
read(raw_file,b_data[n]);
read(raw_file,g_data[n]);
read(raw_file,r_data[n]);
n:=n+1;
end;
CloseFile(raw_file);
もっとスマートな方法もあるだろうけど
こんな感じでどうでしょう?
var
buf: array of byte;
len, ix: integer;
begin
Assignfile(raw_file,filepath);
Reset(raw_file, 1);
Seek (raw_file,start_p);
len := y_mtx * x_mtx * 3;
SetLength(buf, len);
read(raw_file, buf, len);
CloseFile(raw_file);
n := 0;
ix := 0;
while ix < len do
begin
b_data[n] := buf[ix];
g_data[n] := buf[ix+1];
r_data[n] := buf[ix+2];
Inc(n);
Inc(ix, 3);
end;
end;
構文のチェックしてないから、エラーでるかも(^^;
要は、必要な分を先にまとめて読み込んでしまって
メモリ上で仕訳しましょうって話です。
アドバイスありがとうございます。
教えていただいた方法を参考に修正いたしました。
一度すべて読み込んでから分割すれば、処理速度が劇的に改善されました。
ありがとうございました。
ツイート | ![]() |