我加载的图像尺寸略有不同。我怎样才能获得最小尺寸并将它们重新调整到那个尺寸?
以下代码是图片的加载 - >转换为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;
答案 0 :(得分:2)
一旦开始将图像放入TImageList
,就无法调整大小,并且所有图像的大小必须相同。因此,您必须提前预先加载所有图像,以便确定可用的最小尺寸,然后将任何较大的图像裁剪/拉伸到较小的尺寸,然后您可以将最终图像加载到{{1} }。
让你的循环将所有TImageList
存储到TJPEGImage
或TList
中并且不立即释放它们,然后你可以遍历该列表来计算最小的大小,然后循环列表再次根据需要调整图像大小,然后循环遍历列表再次将图像添加到TObjectList
,然后最后遍历列表释放图像。