2011-10-06 12 views
1

次のコードを使用してファイルからイメージをフェッチし、フォルダからすべてのファイルを追加してイメージリストを作成し、最後にリストビューコントロールにリンクしてサムネイルを表示します。私は300画像を追加する場合は、プログラムは700MB以上のメモリを使用しています。画像リストは、メモリ使用量を減らすために実行時に画像を圧縮/再スケーリングすることができる何らかの方法がありますか、 。ImageListのメモリ使用量を減らす方法

     this.t.Images.Add(Image.FromFile(f)); 
         Filelist.Items.Add(f.ToString()); 
         ListViewItem item = new ListViewItem(); 
         this.listview.Items.Add(item); 
+0

http://stackoverflow.com/questions/87753/resizing-an-image-without-losing-any-qualityあなたが唯一の私は、実行時にこれを行う必要があり、どこへ – Guillaume

+0

サムネイルが必要な場合は、あなたのイメージのサイズを変更再サイズのイメージを保存します。 – rainbower

答えて

3

イメージを一時的に読み込み、新しいイメージにサイズ変更して、サイズ変更したイメージをリストに保存します。

using (var tempImage = Image.FromFile(f)) 
{ 
    Bitmap bmp = new Bitmap(thumbnailWidth, thumbnailHeight); 
    using (Graphics g = Graphics.FromImage(bmp)) 
    { 
     g.DrawImage(tempImage, new Rectangle(0, 0, bmp.Width, bmp.Height); 
    } 
    t.Images.Add(bmp); 
} 
+0

ありがとうございます。問題は、 'using'ステートメントを使用するだけでサイズを変更しなくても解決されます。 – rainbower

+0

@rainbower: 'Image.FromFile'について覚えておくべき重要なことは、ドキュメントに記載されているステートメントです。「ファイルがイメージが破棄されるまでロックされたままです。あなたのコードにはたくさんの画像があっただけでなく、300ファイルも開いていました。上のコードはイメージをコピーして(私の場合はサイズを変更します)、元のイメージを破棄してファイルを閉じます。 –

関連する問題