gpt4 book ai didi

delphi - delphi 将zip中的图像提取到内存中

转载 作者:行者123 更新时间:2023-12-02 02:29:36 26 4
gpt4 key购买 nike

我想以某种方式将加载图像的 zip 文件提取到内存中。我并不关心它们进入什么类型的流,只要我之后可以加载它们即可。我对流没有那么深入的了解,并且对该主题的解释似乎没有详细说明。

本质上,我现在正在做的是将文件提取到 (getcurrentdir + '\temp\')。这可行,但不完全是我想要做的。我会更高兴将 jpg 最终存储在内存中,然后能够从内存读取到 TImage.bitmap。

我目前正在使用 jclcompresion 来处理 zip 和 rars,但正在考虑重新使用 system.zip,因为我实际上只需要能够处理 zip 文件。如果继续使用 jclcompression 会更容易,但这对我有用。

最佳答案

read TZipFile的方法类可以与流一起使用

procedure Read(FileName: string; out Stream: TStream; out LocalHeader: TZipHeader); overload;
procedure Read(Index: Integer; out Stream: TStream; out LocalHeader: TZipHeader); overload;

从这里您可以使用索引或文件名访问压缩文件。

检查此示例,它使用 TMemoryStream保存未压缩的数据。

uses
Vcl.AxCtrls,
System.Zip;

procedure TForm41.Button1Click(Sender: TObject);
var
LStream : TStream;
LZipFile : TZipFile;
LOleGraphic: TOleGraphic;
LocalHeader: TZipHeader;
begin
LZipFile := TZipFile.Create;
try
//open the compressed file
LZipFile.Open('C:\Users\Dexter\Desktop\registry.zip', zmRead);
//create the memory stream
LStream := TMemoryStream.Create;
try
//LZipFile.Read(0, LStream, LocalHeader); you can use the index of the file
LZipFile.Read('SAM_0408.JPG', LStream, LocalHeader); //or use the filename
//do something with the memory stream
//now using the TOleGraphic to detect the image type from the stream
LOleGraphic := TOleGraphic.Create;
try
LStream.Position:=0;
//load the image from the memory stream
LOleGraphic.LoadFromStream(LStream);
//load the image into the TImage component
Image1.Picture.Assign(LOleGraphic);
finally
LOleGraphic.Free;
end;
finally
LStream.Free;
end;
finally
LZipFile.Free;
end;
end;

关于delphi - delphi 将zip中的图像提取到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11008024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com