不使用SaveFileDialog保存图像

时间:2017-01-11 16:02:09

标签: c# wpf image savefiledialog

我遇到了SaveFIleDialog问题,我从stackoverflow开始执行了几个步骤。问题是当我不使用SaveFileDialog时,但是:

 private void SaveImage(Canvas canvas, string fileName)
    {
        RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32);

        canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
        canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));

        renderBitmap.Render(canvas);



        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

        using (FileStream file = File.Create(fileName))
        {
            encoder.Save(file);
        }
    }

并在保存按钮事件中调用它,它可以工作。 但当我像这样使用它时:

 private void SaveImage(Canvas canvas, string fileName)
    {
        RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32);

        canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
        canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));

        renderBitmap.Render(canvas);

        SaveFileDialog s = new SaveFileDialog();
        s.FileName = "Pic";
        s.DefaultExt = ".png";
        s.Filter = "Picture files (.png)|*.png";

        Nullable<bool> result = s.ShowDialog();
        if (result == true)
        {
            string filename = s.FileName;

        }
    }

它根本不保存文件。 有什么建议?我做错了什么?

1 个答案:

答案 0 :(得分:2)

您仍然必须将位图保存到文件中。唯一的区别是你应该使用SaveFileDialog的FileName属性作为FileStream的构造函数参数:

private void SaveImage(Canvas canvas, string fileName)
{
    SaveFileDialog s = new SaveFileDialog();
    s.FileName = "Pic";
    s.DefaultExt = ".png";
    s.Filter = "Picture files (.png)|*.png";

    Nullable<bool> result = s.ShowDialog();
    if (result == true)
    {
        RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32);

        canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
        canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));

        renderBitmap.Render(canvas);

        string filename = s.FileName;
        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

        using (FileStream file = File.Create(filename))
        {
            encoder.Save(file);
        }
    }
}