不使用 SaveFileDialog 保存图像
Not saving image with SaveFileDialog
我在使用 SaveFIleDialog 时遇到问题,我遵循了 Whosebug 中的一些步骤。问题是当我不使用 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;
}
}
它根本不保存文件。
有什么建议吗?我做错了什么?
您仍然必须将位图保存到文件中。唯一的区别是您应该使用 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);
}
}
}
我在使用 SaveFIleDialog 时遇到问题,我遵循了 Whosebug 中的一些步骤。问题是当我不使用 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;
}
}
它根本不保存文件。 有什么建议吗?我做错了什么?
您仍然必须将位图保存到文件中。唯一的区别是您应该使用 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);
}
}
}