2012-02-04 6 views
0

画像のサムネイルを表示する小さなアプリケーションをプログラミングしています。表示されているすべてのイメージは同じディレクトリにあり、各イメージはその内部にあり、ラベルとチェックボックスをいくつか含むグループボックスです。すべてのグループボックスがflowlayoutpanelに追加されます。問題は、画像の量がかなり大きくなる可能性があることです。まだ見えない場合でもすべての画像を読み込むと、メモリの使用量/パフォーマンスが多少低下することが懸念されます。必要なときにのみ画像を画像ボックスに読み込み/表示

現在表示されている画像のみを読み込む方法はありますか?私の最初の考えは、私のボックスの場所を格納し、スクロール位置によってロードする画像を決定するか、ピクチャボックス/グループボックスが現在表示されているかどうかを判断する簡単な方法がありますか?

答えて

1

理想的には、1つの画像を隠してもう一方を表示するのではなく、バッファロジックを作成することです。イメージを表示する前に、イメージをロードするいくつかのバッファを用意し、イメージごとに新しいセットではなく、イメージを表示する固定数の実際のフィールドを持つ方がはるかに良いアイデアです。

解決方法が必要な場合は、カスタムユーザーコントロールを作成してみてください。

このような何か試してみてください:

public class customUserControl : UserControl 
{ 
    //Store image as a Uri rather than an Image 
    private Uri StoredImagePath; 
    public class PictureBoxAdv : PictureBox 
    { 
     public PictureBoxAdv() 
     { 
      this.VisibleChanged +=new EventHandler(VisibleChanged); 
     } 
    } 
    public Uri Image 
    { 
     get { return StoredImagePath; } 
     set 
     { 
      StoredImagePath = value; 
      if (this.Visible && StoredImagePath != null) 
      { 
       this.Image = Image.FromFile(StoredImagePath.AbsolutePath); 
      } 
     } 
    } 
    public void VisibleChanged(object sender, EventArgs e) 
    { 
     //When becomes visible, restore image, invisible, nullify. 
     if (this.Visible && StoredImagePath != null) 
     { 
      this.Image = Image.FromFile(StoredImagePath.AbsolutePath); 
     } 
     else 
     { 
      this.Image = null; 
     } 
    } 
} 
+0

をだからあなたが何を意味するかである:目に見えるボックスのセット量を持っており、これらのボックスに表示される画像を変更しますか?私は現在、すべての画像ファイル名を持つリストを持っています。私は基本的にスクロールバーを取ることができ、最小/最大値を私は持っている画像の量に設定し、現在表示されている画像を交換することができます。私が理解していないことは、バッファロジックです、あなたはそれについて詳述できますか? – Splatbang

+0

バッファリングロジックは単純で、List オブジェクトにすべてのイメージを格納するだけで、特定のイメージを呼び出して別のイメージを置き換える場合は、単にimageBox1.Image = Image.FromFile(uiList [2] .AbsolutePath)を呼び出します。 現在の画像と交換するために追加の画像を使用することができます。これにより、バックグラウンドで画像を読み込むことができます。また、読み込んだ画像は置き換えたいPictureBoxに読み込むことができます。 – Corylulu

+0

ああ、それは基本的に私がとにかくやったことです。私は6つのグループボックスとスクロールバーをフォームに配置しました。すべての画像パスをリストに保存し、スクロールバーの値によって表示される画像が決まります。画像表示部は、別のスレッドで処理される。 助けてくれてありがとう! – Splatbang

関連する問題