Delphi FMX carga correctamente las imágenes para minimizar el uso de memoria (dos TImageList)

Delphi FMX carga correctamente las imágenes para minimizar el uso de memoria (dos TImageList)

        Después del último artículo "Delphi FMX carga correctamente imágenes para minimizar el uso de memoria (uno de TBitmapSurface)", continuamos optimizando la memoria Este video habla sobre FMX TImageList cargando imágenes SD grandes.

        En el pasado, cuando usábamos TImageList para cargar íconos pequeños, generalmente no prestábamos atención a los problemas de consumo de memoria. En el pasado, no nos preocupamos por estos problemas al programar VCL, solo apresurándonos. Sin embargo, al usar TImageList en FMX para cargar una gran cantidad de imágenes dinámicas de tamaño de píxel izquierdo y derecho SD como un menú (por ejemplo: 593px * 593px), encontrará que si extrae el mapa de bits de los recursos de imagen de acuerdo con el uso normal, el consumo de recursos de memoria es el precio muy grande.

        1. El enfoque incorrecto

        1.1. Enfoque incorrecto 1: (Ibíd.)

//错误做法1:TImage.Bitmap.LoadFromStream 或 TImage.Bitmap.LoadFromFile
          //内存流太吃内存了,特别又是循环中:
          // 创建流,用流来转换图片,实际应用时可直接将图片处理成流来应用
index :=0;  num :=8; 
//...................
        s.cx := 96;  s.cy := 96;//:屏幕的点阵,非像素:设置为Image的宽高
		for i := index to num + index - 1 do
		begin
//...............................
          TS := TMemoryStream.Create;
          //加载TImageList中的图标
          ilMainImage.Bitmap(s, i).SaveToStream(TS); // 生成流数据
          TS.Position := 0;
          Image.Bitmap.LoadFromStream(TS); //:流数据载入  Image
          TS.DisposeOf;
//...............................
		end;

        1.2. Enfoque incorrecto 2:

index :=0;  num :=8; 
//...................
        s.cx := 96;  s.cy := 96;//:屏幕的点阵,非像素:设置为Image的宽高
		for i := index to num + index - 1 do
		begin
//...............................
          Image.Bitmap.Assign( ilMainImage.Bitmap( s,i ) );//:94个图片能节省23M内存后:但也大
//...............................
		end;

        1.3. Enfoque incorrecto 3:

index :=0;  num :=8; 
//...................
        s.cx := 96;  s.cy := 96;//:屏幕的点阵,非像素:设置为Image的宽高
		for i := index to num + index - 1 do
		begin
//...............................
            LBitmapSurface :=TBitmapSurface.Create;//:创建客制化位图界面
            LBitmapCodec :=TBitmapCodecManager.Create;
            try
              LBitmapSurface.SetSize(96,96);
                LBitmapCodec.LoadFromFile(
                  ilMainImage.Source[i].MultiResBitmap[0].FileName,//:FileName已含路径
                  LBitmapSurface, 96 );
              Image.Bitmap.Assign( LBitmapSurface );
            finally
              LBitmapSurface.DisPoseOf;  LBitmapCodec.DisPoseOf;
            end;
//...............................
		end;

        2. Utilice correctamente TImageList para cargar el mapa de bits de la imagen en Image

index :=0;  num :=8; 
//...................
        s.cx := 96;  s.cy := 96;//:屏幕的点阵,非像素:设置为Image的宽高
		for i := index to num + index - 1 do
		begin
//...............................
          //ilMainImage.ClearCache(i);//:占用2M内存
          //(ilMainImage.Destination[i].Layers[0].MultiResBitmap[0].Bitmap ).Width:=96;//:无需
          //(ilMainImage.Destination[i].Layers[0].MultiResBitmap[0].Bitmap ).Height:=96;//:无需
          (ilMainImage.Destination[i].Layers[0].MultiResBitmap[0].Bitmap ).Assign( ilMainImage.Bitmap( s,i ) );
          Image.Bitmap.Assign( ilMainImage.Destination[i].Layers[0].MultiResBitmap[0].Bitmap );
          //ilMainImage.Bitmap( s,i ).FreeHandle; //:占用5M内存
//...............................
		end;

Publicaciones de blog relacionadas en este blog:

      1. "Delphi FMX carga las imágenes correctamente para minimizar el uso de memoria (una de TBitmapSurface)"

      https://blog.csdn.net/pulledup/article/details/108935897

      2. "Código e ideas de Delphi para manejar la carga y descarga de archivos de alta velocidad"

      https://blog.csdn.net/pulledup/article/details/108660481

Si le gusta, simplemente haga clic en Me gusta y en favorito a continuación, para que pueda ver el siguiente intercambio:

 

Supongo que te gusta

Origin blog.csdn.net/pulledup/article/details/108979086
Recomendado
Clasificación