我有一个由11个白色TBitmap组成的数组(32位512x512像素=1 MB),希望将它们分配给TPngImage数组以减少内存使用量。我希望这个1 MB的白色位图能够变成1.76 KB的png,并且内存使用量大幅降低。我用任务管理器监测了一下,发现差别只有0.824 MB,为什么会这样?在内存中无损压缩TBitmap的最佳/最快方法是什么?
for I := 0 to 10 do
begin
Bitmaps[I] := TBitmap.Create;
Bitmaps[I].PixelFormat := pf32bit;
Bitmaps[I].Canvas.Pen.Color := clWhite;
Bitmaps[I].SetSize(512,512);
Bitmaps[I].Canvas.Rectangle(0,0,512,512);
end;
对于 I := 0 到 10 做如下操作:
创建 Pngs[I] 对象并将 Bitmaps[I] 赋值给它,然后释放 Bitmaps[I] 对象。
更新
根据 @bummi 的研究,我认为最好的做法是将 png 保存在内存流数组中,这会节省 9.7 MB 的空间。
for I := 0 to 10 do
begin
Png := TPngImage.Create;
Png.Assign(Bitmaps[I]);
Streams[I] := TMemoryStream.Create;
Png.SaveToStream(Streams[I]);
Bitmaps[I].Free;
Png.Free;
end;
TPngImage
?你确定它实际上存储了压缩的位图吗?而且@Arioch'The是对的,使用任务管理器实际上无法以有意义的方式测量内存使用情况。你需要获得一个合适的工具。 - David Heffernan