不同大小的图像加载到TImageList中

时间:2012-06-12 01:12:12

标签: delphi

我加载的图像尺寸略有不同。我怎样才能获得最小尺寸并将它们重新调整到那个尺寸?

以下代码是图片的加载 - >转换为bmp - >添加到图像列表

约3张图像后,它会出现错误无效的图像尺寸。由于图像尺寸太大,我在开始时给了imagelist。

procedure TForm1.LoadImages(const Dir: string);
var
  z,i: Integer;
  CurFileName: string;
  JpgIn: TJPEGImage;
  BmpOut: TBitmap;
begin
  i := 0;
  z := 1;
  while True do
  begin
    CurFileName := Format('%s%d.jpg',
                          [IncludeTrailingPathDelimiter(Dir), i]);
    if not FileExists(CurFileName) then
      Break;
    JpgIn := TJPEGImage.Create;
    try
      JpgIn.LoadFromFile(CurFileName);
      if z = 1 then
       begin
        ImageList1.SetSize(jpgin.width, jpgin.Height);
        z := 0;
       end;
      BmpOut := TBitmap.Create;
      try
         BmpOut.Assign(JpgIn);
         ImageList1.Add(BmpOut, nil);
      finally
        BmpOut.Free;
      end;
    finally
      JpgIn.Free;
    end;
    Inc(i);
  end;
  if ImageList1.Count > 0 then
  begin
    BmpOut := TBitmap.Create;
    try
      ImageList1.GetBitmap(1, BmpOut);
      zimage1.Bitmap.Assign(bmpout);
      zimage1.Repaint;
    finally
      BmpOut.Free;
    end;
  end;
end;

1 个答案:

答案 0 :(得分:2)

一旦开始将图像放入TImageList,就无法调整大小,并且所有图像的大小必须相同。因此,您必须提前预先加载所有图像,以便确定可用的最小尺寸,然后将任何较大的图像裁剪/拉伸到较小的尺寸,然后您可以将最终图像加载到{{1} }。

让你的循环将所有TImageList存储到TJPEGImageTList中并且不立即释放它们,然后你可以遍历该列表来计算最小的大小,然后循环列表再次根据需要调整图像大小,然后循环遍历列表再次将图像添加到TObjectList,然后最后遍历列表释放图像。