2012-07-24 81 views

回答

4

加载您的XAML文件:

Stream s = File.OpenRead("yourfile.xaml"); 
Control control = (Control)XamlReader.Load(s); 

和创建的BitmapImage:

public static void SaveImage(Control control, string path) 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      GenerateImage(element, stream); 
      Image img = Image.FromStream(stream); 
      img.Save(path); 
     } 
    } 

    public static void GenerateImage(Control control, Stream result) 
    { 
     //Set background to white 
     control.Background = Brushes.White; 

     Size controlSize = RetrieveDesiredSize(control); 
     Rect rect = new Rect(0, 0, controlSize.Width, controlSize.Height); 

     RenderTargetBitmap rtb = new RenderTargetBitmap((int)controlSize.Width, (int)controlSize.Height, IMAGE_DPI, IMAGE_DPI, PixelFormats.Pbgra32); 

     control.Arrange(rect); 
     rtb.Render(control); 

     PngBitmapEncoder png = new PngBitmapEncoder(); 
     png.Frames.Add(BitmapFrame.Create(rtb)); 
     png.Save(result); 
    } 

    private static Size RetrieveDesiredSize(Control control) 
    { 
     control.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 
     return control.DesiredSize; 
    } 

确保包括正确的库!这些课程位于System.Windows.Media

希望这会有所帮助!

+0

感谢您的快速响应。 – anton 2012-07-25 05:35:17

+0

只做了一个小小的编辑:将SaveImage方法中的**元素** var重命名为** control **。 – anton 2012-07-25 07:04:52

+0

几个问题: 1.如何控制输出位图的分辨率? 2.我如何知道使用哪个DPI? – anton 2012-07-25 08:11:46