2014-04-15 3 views
0

비트 맵 변환기를 사용하는 응용 프로그램이 있습니다. 변환기는 앱이 실행되는 동안 수백/수천 개의 이미지를 처리합니다.IValueConverter에서 비트 맵 이미지 고정하기

약간의 왜곡 : 컨버터가 예외를 던지는 경우 (예 : 빨간색 'x'등) 제자리에 표시되는 일반 오류 이미지를 반환해야합니다 이미지 자체의 이것은 사용자에게 무엇인가 잘못되었다는 것을 알려줍니다. 이미지는 포함 된 리소스로 어셈블리에 압축됩니다.

내 전략이 고정 된 개체를 동결 할 수없는 예외가 발생,

private static readonly BitmapImage ErrorBitmapImage; 
    static ImageConverter() 
    { 
     var assembly = Assembly.GetCallingAssembly(); 
     var name = assembly.GetManifestResourceNames().FirstOrDefault(q => q.Contains("MC900432546.PNG")); 
     BitmapImage bi = new BitmapImage(); 
     bi.BeginInit(); 
     bi.DecodePixelWidth = 30; 
     using (var stream = assembly.GetManifestResourceStream(name)) 
     { 
      bi.StreamSource = stream; 
     } 
     bi.EndInit(); 
     bi.Freeze(); 
     ErrorBitmapImage = bi; 
     ErrorBitmapImage.Freeze(); 
    } 

생성자 두 번 개체를 정지하는 것이 관찰 ... 이런 식으로 계산기에 정적 생성자를 확인하는 것입니다. 그렇지 않으면 코드가 예상대로 작동합니다. 두 개의 정지 화면은 질문을 명확하게하기 위해 여기에 코드화되어 있습니다. 하나는 제거해야한다는 것을 알고 있습니다.

Freeze 호출 중 하나 (또는 ​​둘 모두 가능)를 삭제해야합니다. 두 옵션을 모두 시도했지만 차이점을 감지 할 수 없습니다. 볼륨 테스트를 시작하기 전에 대답을 얻고 싶습니다. 어떤 Freeze를 삭제해야합니까? 아니면 둘다?

+1

동일한 객체 인스턴스에서 Freeze를 두 번 호출하면 문제가되지 않으므로 ... –

+0

어쨌든 동일한 객체 인 bi에서 이미 호출 했으므로 ErrorBitmapImage에서 Freeze를 호출하는 이유는 무엇입니까? –

+0

@ThomasLevesque, 질문이 편집되었습니다. –

답변

1

귀하의 경우처럼 초과 근무 시간을 변경하지 않는 리소스를 고정하는 것이 좋습니다. 이로 인해 일부 리소스 작업이 더 빨라질 수 있습니다. 그러나 Freeze 호출에는 차이점이 없습니다.