2017-03-02 5 views
0

많은 경우 사과하겠습니다. 캔버스의 특정 부분에 여러 BitmapImages를 작성하고 있습니다 (스 니펫). 그것은 잘 작동 :WriteableBitmap (C# 및 WPF) 섹션에 이미지를 복사하는 방법

TreeFile = "pack://application:,,,/Images/" + TreeFile; 

         var image = new Image 
         { 
          Source = new BitmapImage(new Uri(TreeFile)) 
         }; 
         image.Width = 10; 
         image.Height = 10; 

         Canvas.SetLeft(image, x); 
         Canvas.SetTop(image, y); 
         MainCanvas.Children.Add(image); 

는 내가 뭘 원하는 같은 시간에 WriteableBitmap BlankMap;image을 복사하고 같은 위치에 (MainCanvas과 BlankMap가 같은 크기)하는 것입니다. 이것은 '실행 취소'를 만드는 것입니다. 그런 다음 사용자가 새로운 합성 이미지 복사본 BlankMap을 최종본 BitmapImage WorkingMap;으로 유지하려고한다고 가정하면 마지막으로 완료된 WorkingMap을 디스크에 저장해야합니다.

그래서 제 질문은 다음과 같습니다

  1. 하는 WriteableBitmaps이 갈 수있는 올바른 방법을 사용하여인가?
  2. image에서 BlankMap으로 작성하는 방법은 무엇입니까? 내가 BlankMapWorkingMap에 (비록 # 2, # 3은 아마 같은 질문/대답이다 작성합니다 어떻게
  3. .

감사합니다! 그리고 다시, 사과이 중복 질문의 형태 인 경우.

+1

얼마나 많은 WriteableBitmap 클래스 문서를 읽었습니까? https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap(v=vs.110).aspx 몇 가지 문제가 있지만 답변을 모험하기 전에 깊이 있어야한다. –

+0

WriteableBitmap에 익숙합니다. 난 잠시 WPF에서 일한 적이 없어. – zetar

답변

1

매핑 도구 사용 경험을 토대로 WinForms에서 의미있는 생각 프로세스를 적용하고 WPF에서 문제를 일으키는 것이 우려됩니다. WPF에서 생성 된 이미지는주의해야합니다. 프레임 워크에 깊이있는 오래 서있는 버그.

질문 # 1

"실행 취소"기능을 사용하는 것이 올바른 방법입니까? WPF에서는 요소를 쉽게 추가, 이동 및 제거 할 수 있습니다.

명령을 사용하여 변경 사항을 구현 한 다음 취소 할 때 스택에서 명령을 취소한다고 생각했습니다. 그러나, 나는 의미있는 방식으로 이것의 예를 아직 보지 못했다.

질문 # 2

기존 ImageSourceWriteableBitmap를 초기화, 당신은 단순히 생성자에 전달하여 초기화 : 그 후

var BlankMap = new WriteableBitmap(image); 

, 당신은 코드 예제를 따를 것입니다 class documentation에 나와 있습니다.

질문 #은 3

당신은 과정을 역 것이다.


결말은 일부 그래픽 편집을 원하는 것처럼 들리는 것입니다. 비트 맵은 WinForms에서 훌륭하게 작동하므로 WPF에서와 마찬가지로 훌륭하게 작동 할 것이라는 믿음에 빠지기 쉽습니다. 그들은하지 않습니다. 비트 맵의 ​​사용을 제한하여 비트 맵을 표시하면 메모리 누수 등을 처리하는 데 훨씬 편합니다.

관련 문제