2012-08-27 2 views
0

일부 그림 소스를 사용하는 프로그램을 작성하여 파일을 작성했습니다. 고객 미리보기로 작업하기 전에 이미지가 표시됩니다. 그러므로 나는 그들과 함께 일하기 전에 그들을 처분 할 필요가있다. 하지만 나중에 다시 미리보기를로드하고 싶습니다. 동적으로 처리하고 싶은 그림이 너무 많아서 실패합니다.C# 사전을 사용하여 비트 맵 삭제 및 재 작성 /로드

나는 문자열로 파일 이름 사전을 사용

  //Creating a Bitmap so we can preview the Picture. 
     try 
     { 
      mainDrawingBackgroundBitmap = new Bitmap(filePathBackgroundBackgroundImage); 

      if(mainAllBitmapsDictionary.ContainsKey(mainDrawingBackgroundBitmap)) 
      { 
       mainAllBitmapsDictionary.Remove(mainDrawingBackgroundBitmap); 
      }  
      mainAllBitmapsDictionary.Add(mainDrawingBackgroundBitmap,filePathBackgroundBackgroundImage); 
     } 

지금 내 비트 맵과 경로가 사전에, 나중에 내가 그들에게이 방법으로 폐기 : 잘 작동

 private void DisposeAllFiles() 
    { 
     foreach (var tempBitmap in mainAllBitmapsDictionary.Keys) 
     { 
      tempBitmap.Dispose(); 
     } 
    } 

합니다. 내가 비트 맵을 다시 할 때 이제 :

 private void RessurrectAllFiles() 
    { 
     foreach (var tempAllBitmap in mainAllBitmapsDictionary) 
     { 
      try 
      { 
       var tempBitmap = tempAllBitmap.Key; 
       tempBitmap = new Bitmap(tempAllBitmap.Value); 
      } 
      catch (ArgumentException ae) 
      { 
      } 
     } 

    } 

그는 실패하거나 오류가 발생하지 않습니다, 사전 심지어 올바른 비트 맵 문자열하지만, ​​그와 함께 채워집니다 더 이상 원래의 객체에 영향을하지 않는 것 그래서 사전은 그대로이지만, 내가 mainDrawingBackgroundBitmap과 같은 비트 맵을 검사 할 때, 나는 단지 ArgumentExceptions 만 볼 수있다.

뻔뻔스럽게 말하면 어디서 실패합니까?

답변

1

이미지의 경로를 키로 유지하고 비트 맵 데이터를 값으로 유지하면 데이터를 쉽게 조작하고 사전 검색이 빨리 수행됩니다.

Dictionary<string, Bitmap> 
+0

미안하지만이 문제는 내 문제와 어떤 관련이 있습니까? 또한 나는 그것의 동일한 속도가 개체 또는 문자열을 검색, 어쨌든 나는 검색/무언가를 조작 할 의도가 생각합니다. – Master117

+0

@ Master117을 호출하여 'var tempBitmap = tempAllBitmap.Key;'를 호출하면 변수의 로컬 복사본이 만들어지고 원래 사전 값은 수정되지 않습니다. 문자열 값이 변하지 않으므로 Kresimir의 조언에 따라이 문제가 해결됩니다. 그 반대의 경우도 논리적 관점에서 훨씬 더 의미가 있습니다. – Rotem

+0

문제는 값 또는 키가 모두 다음과 같지 않습니다. tempAllBitmap.Value = new Bitmap (tempAllBitmap.Key); 또는 반대가 허용됩니다. 또한 여러 비트 맵 같은 경로/문자열을 가질 수 있습니다 따라서 문자열로 키를 사용하여 성가신 될 수도 있습니다 – Master117