2012-04-23 10 views
0

XAML UsercontrolをPNGに変換するアプリケーションがあります。これは今まではうまくいきましたが、残念ながら画像のサイズを倍増する必要があります。WPFをPNGにレンダリングするときにTransformGroupをFramworkElementに追加する

私の方法(それが動作しません!)私はそれをロードした後に、視覚的要素にScaleTransformを追加することでした...

この行はSaveUsingEncoderメソッドの上部に新しいラインです。

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

(この回答のためクレメンスのおかげ! - しかし、彼はコメントとしてそれを置く)

関連する問題