C# 不使用SaveFileDialog保存图像
我在SaveFIleDialog中遇到问题,我遵循了stackoverflow中的几个步骤。问题是当我不使用SaveFileDialog时,但是:C# 不使用SaveFileDialog保存图像,c#,wpf,image,savefiledialog,C#,Wpf,Image,Savefiledialog,我在SaveFIleDialog中遇到问题,我遵循了stackoverflow中的几个步骤。问题是当我不使用SaveFileDialog时,但是: private void SaveImage(Canvas canvas, string fileName) { RenderTargetBitmap renderBitmap = new RenderTargetBitmap(4646, 3890, 1500d, 1500d, PixelFormats.Pbgra32);
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);
}
}
并在save button事件中调用它,它就工作了。
但当我这样使用它时:
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;
}
}
private void SaveImage(画布,字符串文件名)
{
RenderTargetBitmap renderBitmap=新的RenderTargetBitmap(464638901500d,1500d,PixelFormats.Pbgra32);
canvas.Measure(新尺寸((int)canvas.Width,(int)canvas.Height));
canvas.Arrange(新Rect(新大小((int)canvas.Width,(int)canvas.Height));
renderBitmap.Render(画布);
SaveFileDialog s=新建SaveFileDialog();
s、 FileName=“Pic”;
s、 DefaultExt=“.png”;
s、 Filter=“图片文件(.png)|*.png”;
可为空的结果=s.ShowDialog();
如果(结果==真)
{
字符串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);
}
}
}
private void SaveImage(画布,字符串文件名)
{
SaveFileDialog s=新建SaveFileDialog();
s、 FileName=“Pic”;
s、 DefaultExt=“.png”;
s、 Filter=“图片文件(.png)|*.png”;
可为空的结果=s.ShowDialog();
如果(结果==真)
{
RenderTargetBitmap renderBitmap=新的RenderTargetBitmap(464638901500d,1500d,PixelFormats.Pbgra32);
canvas.Measure(新尺寸((int)canvas.Width,(int)canvas.Height));
canvas.Arrange(新Rect(新大小((int)canvas.Width,(int)canvas.Height));
renderBitmap.Render(画布);
字符串filename=s.filename;
PngBitmapEncoder编码器=新的PngBitmapEncoder();
Add(BitmapFrame.Create(renderBitmap));
使用(FileStream file=file.Create(filename))
{
编码器。保存(文件);
}
}
}
您不保存,因为没有编码器。保存(文件)代码>?-如第一个示例所示,将对话框所选名称传递给文件流。该对话框仅提供用户选择的文件名字符串,它不/不能将任何内容写入磁盘。