我有一个包含 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;
for I := 0 to 10 do
begin
Pngs[I] := TPngImage.Create;
Pngs[I].Assign(Bitmaps[I]);
Bitmaps[I].Free;
end;
更新
Form @bummi research 我认为最好的办法是将 pngs 保存在内存流数组中,这样可以产生 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;