image - 如何优化图像解码的Delphi代码?

标签 image delphi image-processing

我已经对图像进行了编码,并希望在我的程序中对其进行解码。图像解码基于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;

如您所见,我使用了两个内存缓冲区:bufTMemoryStream。如何优化此代码以避免双重内存使用?

最佳答案

TMemoryStream 有一个Memory 成员,允许直接访问内存块。这样就可以完全消除buf

关于image - 如何优化图像解码的Delphi代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23108522/

相关文章:

android - 将图片从Android发送到PC上的Matlab

delphi - Delphi有 "mind mapping"组件吗? (最好是原生VCL)

json - 如何使用 X-SuperObject 访问 JSON 中的嵌套值

image - 用随机颜色填充封闭区域 - Haskell - 星期五

opencv - 如何混合 80x60 热图像和 640x480 RGB 图像?

php - 在 PHP 中将二进制字节数组转换为图像

ios - 需要有关通过API访问的图片托管的建议

delphi - 如何显示 Windows 照片打印向导?

java - 如何获取 TYPE_3BYTE_BGR 中 jpeg 图像的 rgb 值?

javascript - 选择多张图片并上传预览