我已经对图像进行了编码,并希望在我的程序中对其进行解码。图像解码基于Loren Pechtel的答案:图像文件被加载到Stream中,解码,转换为MemoryStream,然后通过TSynPicture class从MemoryStream加载。 Delphi代码如下:
function loadEncodedImage(filename, keycode : string) : TBitmap;
syn : TSynPicture;
fs : TFileStream;
ms : TMemoryStream;
buf : AnsiString;
begin
result := nil;
try
fs := TFileStream.Create(filename, fmOpenRead);
SetLength( buf, fs.Size );
fs.ReadBuffer( buf[1], fs.Size );
// ....
// Here I decode data stored in buf and put it into buf again.
// ....
ms := TMemoryStream.Create();
ms.SetSize( fs.Size );
ms.WriteBuffer( buf[1], fs.Size );
syn := TSynPicture.Create();
syn.LoadFromStream( ms );
result := syn.ToBitmap;
finally
FreeAndNil( fs );
FreeAndNil( syn );
end;
end;
如您所见,我使用了两个内存缓冲区:buf 和TMemoryStream。如何优化此代码以避免双重内存使用?
最佳答案
TMemoryStream
有一个Memory
成员,允许直接访问内存块。这样就可以完全消除buf
。
关于image - 如何优化图像解码的Delphi代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108522/