2016-09-04 1 views
0

그래서 나는 사용자가 선택 이미지를 표시하는 작은 상자 인 <Image> 개체를 가지고 있습니다.BitmapImage에 대해 CacheOption.OnLoad를 사용하면 이미지 그림을 새로 고치는 방법 WPF C#

자주 변경 될 수 있으므로 BitmapCacheOption.OnLoad를 사용해야하므로 메모리에로드되고 이전에 문제가 처리 된 파일이 사용되지 않습니다.

하지만 그런 파일을 변경하면이 이미지 콘텐츠를 새로 고치는 데 문제가 있습니다.

누구나 내가이 상황을 어떻게 관리 할 수 ​​있는지 힌트를 줄 수 있습니다. 내가 비트 맵의 ​​파일을 변경 할 수있는 동안 사용자가 새로운 이미지를 선택하면 (새 사진을 표시) 내 이미지를 다시하고 싶은

  ... changing file at pathToFileDestination 
      BitmapImage imageBitmap = new BitmapImage(); 
      imageBitmap.BeginInit(); 
      imageBitmap.CacheOption = BitmapCacheOption.OnLoad; 
      imageBitmap.UriSource = new Uri(pathToFileDestination, UriKind.Absolute);  
      imageBitmap.EndInit(); 

      positionPicture.Source = null; 
      positionPicture.Source = imageBitmap; 
      ((PositionManagerWindow)this.Owner).positionPicture_image.Source = null; 
      ((PositionManagerWindow)this.Owner).positionPicture_image.Source = imageBitmap; 

: 내가 사용 후 코드를 아래와 같이 새로운 이미지를 선택합니다.

내가 무슨 뜻인지 이해해 주시겠습니까? 질문하지 않으면 명확하지 않은 것을 지정하십시오.

답변

0

시도 할 때 예외가 발생하는 경우 파일 액세스 문제로 인한 것일 수 있습니다. 나는 그런 문제가 있었고 현재는 FileStreamInvoker을 사용하여 잘 작동합니다. 이미지가 변경되고 파일 경로가 탐색기 또는 내부 응용 프로그램에 관계없이 문제가 없습니다.

코드 :

void setImageSource(string file) 
    { 

      using (var stream = new FileStream(
            file, FileMode.Open, FileAccess.Read, FileShare.Read)) 
      { 
       image.Source = BitmapFrame.Create(
        stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
      } 

    } 
+0

당신의 pathToFileDestination? 디버그 폴더 또는 당신이 만든 모든 폴더에 있습니까? –

+1

Uri 대신 FileStream을 사용하는 것이 좋은 힌트 일 수 있지만 Dispatcher (Invoker 아님)를 사용해야한다는 것은 아무런 징후가 없습니다. 그것 없이는 더 나은 대답이 될 것입니다. – Clemens

+0

@ J.Hasan 나는 둘 다 문제없이 사용하려고했습니다. –

관련 문제