我已经搜索了很多内容,但没有找到任何描述Delphi代码中我想要实现的内容。有些解决方案接近,但不足以让我理解。所以我在这里询问。
我有许多位图,从屏幕截图中检索。我一直在保存为bitmaps_001.bmp,但它占用了很多存储空间,因此我升级了例程,将其保存为bitmaps_001.png,这可以节省更大的空间,但现在我想保存到一个TFileStream文件中,并使用TProgressBar从中读取,我可以拖动左/右以显示屏幕上的图像。
基本上,我正在尝试实现以下内容:
到目前为止,以下代码可以正常工作(在按下tbutton时同时编写和读取一个位图图像),但我只能编写一张位图图像。我需要实时在每个会话中将尽可能多的图像写入到tfilestream中,可能使用ttimer控件,并让它写入尽可能多的图像,直到我按下stop tbutton。该怎么修改以下代码以解决这个问题?谢谢。
我正在运行Windows XP,连接到带有NTFS文件系统的外部USB3.0 1TB驱动器。
我有许多位图,从屏幕截图中检索。我一直在保存为bitmaps_001.bmp,但它占用了很多存储空间,因此我升级了例程,将其保存为bitmaps_001.png,这可以节省更大的空间,但现在我想保存到一个TFileStream文件中,并使用TProgressBar从中读取,我可以拖动左/右以显示屏幕上的图像。
基本上,我正在尝试实现以下内容:
procedure SaveBMPtoStream(st: tfilestream; bmp: tbitmap);
procedure ReadBMPfrStream(st: tfilestream; bmp: tbitmap; bnum: integer);
到目前为止,以下代码可以正常工作(在按下tbutton时同时编写和读取一个位图图像),但我只能编写一张位图图像。我需要实时在每个会话中将尽可能多的图像写入到tfilestream中,可能使用ttimer控件,并让它写入尽可能多的图像,直到我按下stop tbutton。该怎么修改以下代码以解决这个问题?谢谢。
我正在运行Windows XP,连接到带有NTFS文件系统的外部USB3.0 1TB驱动器。
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;