2009-08-28 4 views
3

현재 System.Windows.Media.DrawingGroup을 사용하여 Children-DrawingCollection 속성 내에 일부 바둑판 식 이미지 (ImageDrawing)를 저장하고 있습니다. 이제 DrawingGroup에 수백 또는 수천 개의 작은 이미지가 포함될 수 있으므로 전체 DrawingGroup을 이미지 컨트롤에 표시하면이 메서드는 성능이 상당히 엉망이 될 수 있습니다.WPF DrawingGroup을 단일 ImageSource로 렌더링

그래서 첫 번째 생각은 어떻게 든 DrawingGroup 내부의 모든 작은 이미지에서 하나의 이미지를 렌더링 한 다음 이미지를 표시하는 것이 훨씬 빠를 것입니다. 그러나 당신이 알았을 지 모르겠지만 어떤 해결책도 찾지 못했습니다. 그래서 여러 이미지를 WPF Imaging과 결합하십시오.

누군가가이 문제를 도울 수 있거나 DrawingGroup을 사용하여 성능을 향상시킬 수 있는지 또는 다른 접근법을 사용하는 방법을 알려 주시면 정말 대단합니다.

마지막으로 한 가지, 현재 RenderTargetBitmap을 사용하여 DrawingGroup에서 단일 BitmapSource를 생성하고 있지만이 방법은 그리 빠르지는 않지만 스크롤을하고 이미지 컨트롤을 조금 더 부드럽게 처리합니다.

답변

1

다른 이미지 위에 겹쳐진 일부 이미지를 표시해야하는 번거 로움과 함께 바둑판 식 이미지와 관련된 문제에 대해 작업하고 있습니다.

성능 문제가 발생하지 않았습니다. 이미지가 작고 크기가 비교적 작기 때문에 100 개 정도되지 않을 가능성이 있습니다. 그러나 코드 샘플에서 Freeze 메서드를 발견했습니다. DrawingImage 클래스 그것에 대한 코멘트는 "성능 이점을 위해 DrawingImage 고정"이었습니다.

Freeze 메서드는 DrawingGroup 클래스에도 적용됩니다. 어쩌면 시도해 볼까요?

2

나는이 문제에 적용 모르겠지만, 누군가 도움이 될 수 있기 때문에 어쨌든 여기에 게시합니다 :

그렇지 않은 경우 도면 그룹의 모든 이미지를 가시가 될 것입니다 같은 시간에 ClipGeometry 속성을 원하는대로 설정할 수 있습니다. 이는 효과적으로 WPF에 지오메트리 외부의 파트가 필요하지 않으며 렌더링하는 동안 건너 뛸 것이라고 알려줍니다. 당신이 실험을 할 수

다른 몇 가지 사항은 다음과 같습니다

  • Freeze drawinggroup 이미지 소스에 적용하기 전에. 적어도 인스턴스를 수정할 필요가 없지만 기존 인스턴스를 수정하는 대신 항상 새 인스턴스를 만들 수 있다는 것을 기억하십시오.
  • 다른 방법을 사용하여 드로잉 그룹을 표시해보십시오. 예를 들어, DrawingVisual (경량으로 간주 됨) 또는 DrawingBrush (예 : 직사각형.
  • 작은 이미지를 더 작은 그룹으로 결합한 다음 더 큰 그룹으로 결합하십시오. 이것이 성능을 향상 시키거나 손상시키는 지에 대해서는 잘 모르겠지만 시도해 볼 가치가 있습니다.
관련 문제