0

読み込み中の画像のサイズは少し異なります。最小サイズを取得して、それらすべてをそのサイズに再サイズ化するにはどうすればよいですか?

以下のコードは、画像の読み込み->bmpへの変換->画像リストへの追加です

約3枚の画像の後、無効な画像サイズのエラーが発生します。画像サイズが大きすぎて、最初に画像リストに表示したサイズに対して大きすぎます。

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;
4

1 に答える 1

2

に画像を入れ始めるTImageListと、サイズを変更することはできません。すべての画像は同じサイズである必要があります。したがって、事前にすべての画像をプリロードして、利用可能な最小サイズを決定し、大きい画像を小さいサイズにトリミング/ストレッチしてから、最終的な画像をに読み込むことができるようにする必要がありますTImageList

ループにすべてをまたはに保存TJPEGImageさせ、すぐに解放しないようにします。次に、そのリストをループして最小サイズを計算し、必要に応じてリストをもう一度ループして画像のサイズを変更し、リストをもう一度ループして画像を追加します。に移動し、最後にリストをループして画像を解放します。TListTObjectListTImageList

于 2012-06-12T01:45:11.710 に答える