2012-04-23 2 views
0

일부 XAML UserControl을 PNG로 변환하는 앱이 있습니다. 현재까지는 잘 작동했지만 불행히도 이제는 이미지의 크기를 두 배로 늘려야합니다.WPNG를 PNG로 렌더링 할 때 TransformGroup을 FramworkElement에 추가하십시오.

내 방법 (즉, 작동하지 않습니다!) 내가로드 한 후

이 줄은 SaveUsingEncoder 방법의 상단에 새로운 라인 ... 시각적 요소에 ScaleTransform을 추가했다.

visual.RenderTransform = GetScaleTransform (2);

PNG는 새로운 크기 (3000 x 2000)이지만 XAML은 이미지 가운데에 1500x1000으로 렌더링됩니다.

아무도 도와 줄 수 있습니까? RenderTargetBitmap에

렌더링하기 전에 visual.UpdateLayout 호출

private void Load(string filename) 
    { 
     var stream = new FileStream(filename), FileMode.Open); 
     var frameworkElement = (FrameworkElement)(XamlReader.Load(stream)); 

     var scale = 2; 

     var encoder = new PngBitmapEncoder(); 
     var availableSize = new Size(1500 * scale, 1000 * scale); 

     frameworkElement.Measure(availableSize); 
     frameworkElement.Arrange(new Rect(availableSize)); 
     name = name.Replace(" ", "-"); 
     SaveUsingEncoder(frameworkElement, string.Format(@"{0}.png", name), encoder, availableSize); 
    } 

    private TransformGroup GetScaleTransform(int scale) 
    { 
     var myScaleTransform = new ScaleTransform {ScaleY = scale, ScaleX = scale}; 
     var myTransformGroup = new TransformGroup(); 
     myTransformGroup.Children.Add(myScaleTransform); 
     return myTransformGroup; 
    } 

    private void SaveUsingEncoder(FrameworkElement visual, string fileName, BitmapEncoder encoder, Size size) 
    { 
     visual.RenderTransform = GetScaleTransform(2); 
     var bitmap = new RenderTargetBitmap(
      (int) size.Width, 
      (int) size.Height, 
      96, 
      96, 
      PixelFormats.Pbgra32); 
     bitmap.Render(visual); 

     var frame = BitmapFrame.Create(bitmap); 
     encoder.Frames.Add(frame); 

     using (var stream = File.Create(fileName)) 
     { 
      encoder.Save(stream); 
     } 
    } 
+0

[에 UpdateLayout] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.updatelayout.aspx) RenderTargetBitmap 렌더링하기 전에? – Clemens

+0

그게, 환호! –

답변

0

(이 대답을 클레멘스에게 감사를! -하지만 그는 주석으로 넣어).

당신이 시각적으로 전화하면 어떻게됩니까