4

画像フィールドに画像を含むテーブルがあり、それらをImageListに入れます。コードは次のとおりです。

ImageList.Clear;
ItemsDts.First;
ImageBitmap:= TBitmap.Create;
try
  while not ItemsDts.Eof do
  begin
    if not ItemsDtsPicture.IsNull then
    begin
      ItemsDtsPicture.SaveToFile(TempFileBitmap);
      ImageBitmap.LoadFromFile(TempFileBitmap);
      ImageList.Add(ImageBitmap, nil);
    end;
    ItemsDts.Next;
  end;
finally
  ImageBitmap.Free;
end;

しかし、ImageListサイズとサイズが異なる画像には問題があります。

更新:私の問題は、ImageListサイズ(32 * 32)より大きい画像(たとえば100 * 150)を追加すると、ImageListに接続されたコンポーネント(たとえばListView)に正しく表示されないことです。新しく追加された画像は引き伸ばされていないようですが、トリミングされています。ImageListEditorのように新しい画像を拡大したい。

4

1 に答える 1

7

ImageListが画像を自動的に拡大するプロパティを提供するかどうかはわかりません。誰かが組み込みを見つけない限り、ImageListに追加する前に、いつでも自分で画像を拡大することができます。そして、あなたがそれにいる間、ディスク上のファイルの使用をやめてください:TMemoryStream代わりに使用してください。このようなもの:

var StretchedBMP: TBitmap;
    MS: TMemoryStream;

ImageList.Clear;
ItemsDts.First;
StretchedBMP := TBitmap.Create;
try

  // Prepare the stretched bmp's size
  StretchedBMP.Width := ImageList.Width;
  StretchedBMP.Height := ImageList.Height;

  // Prepare the memory stream
  MS := TMemoryStream.Create;
  try
    ImageBitmap:= TBitmap.Create;
    try
      while not ItemsDts.Eof do
      begin
        if not ItemsDtsPicture.IsNull then
        begin
          MS.Size := 0;
          ItemsDtsPicture.SaveToStream(MS);
          MS.Position := 0;
          ImageBitmap.LoadFromStream(MS);
          // Stretch the image
          StretchedBMP.Canvas.StretchDraw(Rect(0, 0, StretchedBmp.Width-1, StretchedBmp.Height-1), ImageBitmap);
          ImageList.Add(StretchedBmp, nil);
        end;
        ItemsDts.Next;
      end;
    finally MS.Free;
    end;
  finally StretchedBMP.Free;
  end;
finally
  ImageBitmap.Free;
end;

PS:ブラウザのウィンドウでコードを編集しました。コンパイルされることを保証することはできませんが、コンパイルされない場合は、簡単に修正できるはずです。

于 2011-07-13T09:22:35.760 に答える