2012-02-04 4 views
0

이미지의 축소판을 보여주는 작은 애플리케이션을 프로그래밍하고 있습니다. 표시된 모든 이미지는 동일한 디렉토리에 있으며 각 이미지는 내부에 몇 개의 레이블과 확인란이있는 그룹 상자가 있습니다. 모든 그룹 상자가 flowlayoutpanel에 추가됩니다. 문제는 이미지의 양이 꽤 커질 수 있으며 아직 보이지 않더라도 모든 이미지를로드하면 메모리 사용량/성능이 약간 저하 될 수 있다는 것입니다.필요할 때만 이미지를 그림 상자에로드하십시오.

현재 사용자에게 표시되는 이미지 만로드 할 수있는 방법이 있습니까? 내 첫 번째 생각은 내 상자의 위치를 ​​저장하고 스크롤 위치에 따라로드 할 이미지를 결정하거나 picturebox/groupbox가 현재 표시되는지 확인하는 더 쉬운 방법이 있습니까?

답변

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

관련 문제