複数のImageに画像を入れるには?

解決


スパムちゃんvv  2010-08-01 00:48:56  No: 38903

未熟な私にお知恵をおかしください。
複数のImageに、効率よくJpeg画像を入れたいのですが、どうしたら良いでしょうか?

Imageは10個程度なのですが、必ず10ではなく、入らない場合もあります。

よろしくお願いします・


なな  2010-08-01 08:31:00  No: 38904

画像の数だけTImageを生成すれば済む問題です?
それとも一定数かつ一定サイズのTImageに効率よく分配する話です?
はたまた1つのTCanvasを複数のイメージで効率よく埋める話です?


KHE00221  2010-08-01 17:16:17  No: 38905

動的にTImageを作成するなら CreateImage
この場合表示させる場合 Left や Top を考えないといけない

すでにフォームに配置されているTImageにロードするなら CreateImage2

procedure TForm1.CreateImage(APath: String);
var
    SearchRec: TSearchRec;
    I: Integer;
    FileName: String;
begin
    ImageCount := 0;
    I := FindFirst (APath,faAnyFile,SearchRec);
    while I = 0 do
    begin
      FileName := ExtractFilePath(APath) + SearchRec.Name;
      SetLength(Images,ImageCount+1);
      Images[ImageCount] := TImage.Create(Self);
      Images[ImageCount].Picture.LoadFromFile(FileName);
      I := FindNext(SearchRec);
    end;
    FindClose (SearchRec);
end;

procedure TForm1.CreateImage2(APath: String);
var
    SearchRec: TSearchRec;
    ComponentIndex: Integer;
    I: Integer;
    FileName: String;
begin
    ImageCount := 0;
    ComponentIndex := -1;
    I := FindFirst (APath,faAnyFile,SearchRec);
    while I = 0 do
    begin
      SetLength(Images,ImageCount+1);
      I := 0;
      while I < Form1.ComponentCount -1 do
      begin
        if (Form1.Components[I] is TImage) and (ComponentIndex < I) then
        begin
          FileName := ExtractFilePath(APath) + SearchRec.Name;
          TImage(Form1.Components[I]).Picture.LoadFromFile(FileName);
          ComponentIndex := I;
          I := Form1.ComponentCount;
        end;
        Inc(I);
      end;
      I := FindNext(SearchRec);
    end;
    FindClose (SearchRec);
end;

procedure TForm1.DestoryImage;
var
    I: Integer;
begin
    for I:=0 to High(Images) do
    begin
      Images[I].Free;
    end;
    SetLength(Images,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    DestoryImage;
    CreateImage('c:\windows\*.bmp');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    CreateImage2('c:\windows\*.bmp');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    DestoryImage;
end;


すぱむちゃんvv  2010-08-02 04:42:08  No: 38906

お二方とても参考になりました。
ありがとうございました。


すぱむちゃんvv  2010-08-02 04:42:10  No: 38907

お二方とても参考になりました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加