2011-07-13 5 views
3

私はテーブルに画像をPictureフィールドに入れてImageListに入れようとしています。 は、ここでは、コードです:Delphiの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サイズ(32 * 32)より大きいImage、たとえば100 * 150などのImageを追加すると、ImageListに接続されたコンポーネント(ListViewなど)では正しく表示されません。 新しく追加された画像が伸びずに切り取られているようです。 ImageList Editorのように新しい画像を引き伸ばしたい。

+0

これはまだ質問ではありません。 「ImageListサイズと異なるサイズの画像には問題があります。」問題の内容を正確に記述し、特定の直接的な質問をしてください。 –

+0

あなたはどんな問題がありますか?画像はどのように見えますか、どのように見たいのですか? –

+1

@David Heffernanと@Cosmin Prund:申し訳ありません。質問が更新されました... – mtoloo

答えて

5

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:私は、ブラウザのウィンドウでコードを編集しました。私はコンパイルを保証することはできませんが、そうでなければ、修正するのは簡単なはずです。

+0

ありがとうございます。できます。 MemoryStreamを使用してくれてありがとう。以前はTMemoryStreamの使用を試みていましたが、できませんでした。私はサイズと位置をゼロに設定することが知られていなかったので、必要です。 – mtoloo

+0

しかし、唯一の問題は画像が透明でないことです。だから別の質問をしています: http://stackoverflow.com/questions/6688356/add-transparent-and-stretched-image-to-imagelist-in-delphi – mtoloo

関連する問題