私は検索して検索しましたが、デルファイコードで何をしようとしているのかを説明するものが見つからないようです。ソルチンは時々近くにありますが、私が理解するのに十分なほど近くにはありません。だからここで私は尋ねています。
スクリーンショットから取得しているビットマップがたくさんあります。私がやっていることはbitmaps_001.bmpに保存することですが、それは多くのストレージスペースを必要とするので、bitmaps_001.pngとして保存するようにルーチンをアップグレードしました、そしてこれはさらに大きなスペースを節約します、しかし今私は1つのファイルに保存したいです、 tfilestreamを作成し、tprogressbarを使用して読み取ります。これは、画像が画面に表示されているときに左右にドラッグできます。
基本的に、私は次のことを達成しようとしています:
procedure SaveBMPtoStream(st: tfilestream; bmp: tbitmap);
procedure ReadBMPfrStream(st: tfilestream; bmp: tbitmap; bnum: integer);
これまでのところ、コード(以下)はそのまま機能します(ボタンを押すだけで1つのビットマップイメージを読み書きします)が、私は1つのビットマップイメージしか書き込むことができません。セッションごとに必要な数の画像をリアルタイムでtfilestreamに書き込む必要があります。おそらく、ttimerコントロールを使用して、停止ボタンを押すまでできるだけ多くの画像を書き込むようにします。これを解決するために以下のコードを変更するにはどうすればよいですか?ありがとうございました。
NTFSファイルシステムを使用して外部usb3.01tbドライブに接続されたWindowsXPを実行しています。
type
TMS = TFileStream;
var
MS: TMS;
pos: int64; // bnum for 0-99,999 images.
sz: integer; // size of the image/stream ?
//write bitmaps to stream
procedure SaveBMPtoStream(ms: TMS; Bmp: TBitmap; bnum: integer);
begin
// create (or append to) stream
if fileexists('d:\streams\s.stm') then MS := TFileStream.Create('d:\streams\s.stm', fmOpenReadWrite)
else MS := TFileStream.Create('d:\streams\s.stm', fmCreate);
//sz:=MS.Size; pos:=ms.Position;
bmp.SaveToStream(MS);
// free stream
ms.free;
end;
//read bitmaps from stream
procedure ReadBMPfrStream(ms: TMS; Bmp: TBitmap; bnum: integer);
begin
// open stream.
MS := TFileStream.Create ('d:\streams\s.stm', fmOpenReadWrite);
// read in bitmap from stream
//sz:=MS.Size; pos:=ms.Position;
bmp.LoadFromStream(MS);
// free stream
ms.free;
end;