将XAML文件转换为BitmapImage

ant*_*ton 1 c# xaml bitmapimage

我想从XAML(文本)文件创建具有所需分辨率的BitmapImage.我怎样才能做到这一点?

谢谢.

Arc*_*rus 5

要加载Xaml文件:

Stream s = File.OpenRead("yourfile.xaml");
Control control = (Control)XamlReader.Load(s);
Run Code Online (Sandbox Code Playgroud)

并创建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;
    }
Run Code Online (Sandbox Code Playgroud)

确保包含正确的库!课程位于System.Windows.Media.

希望这可以帮助!

  • 1.为DesiredSize方法返回一个不同的值,2.96是非常默认的..更高的DPI (2认同)