2014-09-18 3 views
1

문제는 하나의 셸 응용 프로그램에서 동적으로 워크 플로 디자이너를 열고 Canvas에 대한 참조가없는 것입니다. WF4를 이미지로 저장할 수 있지만 이미지가 제대로 저장되지 않고 상단 여백이 &입니다. 나는 많은 기사를 따라 가면서 성공했지만 성공하지 못했다. 나는 또한 다음 기사를 언급했다.WF 4 워크 플로를 이미지로 저장

Saving a canvas to png C# wpf

나는 아래의 기능을 사용하고 있습니다. 캔버스에 대한 언급이 없습니다.

private BitmapFrame CreateWorkflowImage() 
    { 
    const double DPI = 96.0; 
     Visual areaToSave = ((DesignerView)VisualTreeHelper.GetChild(this.wd.View, 
     0)).RootDesigner; 
     Rect bounds = VisualTreeHelper.GetDescendantBounds(areaToSave); 
     RenderTargetBitmap bitmap = new RenderTargetBitmap((int)bounds.Width, 
      (int)bounds.Height, DPI, DPI, PixelFormats.Default); 
     bitmap.Render(areaToSave); 
     return BitmapFrame.Create(bitmap);  
    } 

도와주세요.

답변

1

나는 다음 코드를

비주얼 캔버스 = ((DesignerView를 사용하여 I 캔버스에 대한 참조를 가지고

Saving a canvas to png C# wpf

다시는 아래의 링크를 참조하여 문제를 해결할 수 있어요) VisualTreeHelper.GetChild (this.WorkflowDesigner1.View, 0)). RootDesigner;

테두리/여백 문제가 해결되었습니다.

0

여기 좀 제발 : WPF의 표준 메커니즘을 사용하여 워크 플로우 정의의 이미지를 생성하는 방법에 http://blogs.msdn.com/b/flow/archive/2011/08/16/how-to-save-wf4-workflow-definition-to-image-using-code.aspx

하자의 모습을. 결국 워크 플로 디자이너 캔버스는 WPF 컨트롤입니다.

BitmapFrame CreateWorkflowDefinitionImage() 
{ 
    const double DPI = 96.0; 
    // this is the designer area we want to save 
    Visual areaToSave = ((DesignerView)VisualTreeHelper.GetChild(
     this.workflowDesigner.View, 0)).RootDesigner; 
    // get the size of the targeting area 
    Rect size = VisualTreeHelper.GetDescendantBounds(areaToSave); 
    RenderTargetBitmap bitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 
     DPI, DPI, PixelFormats.Pbgra32); 
    bitmap.Render(areaToSave); 
    return BitmapFrame.Create(bitmap); 
} 

위의 C# 방법은 매우 간단합니다. 워크 플로 디자이너의 워크 플로 다이어그램 부분을 가져 와서 WPF API를 사용하여 워크 플로 디자이너의 메모리 내 이미지를 만드십시오. 다음은 간단합니다 : 파일을 만들고 이미지를 저장하십시오.

마지막으로 OnInitialized() 메서드에서 위의 두 메서드를 호출하여 응용 프로그램을 닫은 다음 닫으려고합니다.

protected override void OnInitialized(EventArgs e) 
{ 
    // ... 
    this.SaveImageToFile("test.jpg", this.CreateWorkflowDefinitionImage()); 
    Application.Current.Shutdown(); 
} 
+0

입력 해 주셔서 감사합니다. 내 요구 사항은 워크 플로를 이미지로 저장할 수 있지만 이미지에 왼쪽 및 위쪽 테두리가 포함되어 있다는 것입니다. 이러한 경계선을 사용하여 이미지를 저장하는 방법을 알려주십시오. –