【发布时间】:2015-10-27 23:13:12
【问题描述】:
我正在尝试将包含一些形状的画布保存为图像(*.jpg、*.bmp、*.png)并将该图像再次加载到画布。
当我单击“保存按钮”然后单击“加载按钮”然后再次单击“保存按钮”时,出现以下错误:
进程无法访问文件 'H:\VisualC\HK5\LT Win\ForTesting\TestSaveCanvasToBitmap\bin\Debug\TestImage.bmp',因为它正被另一个进程使用。
似乎有一个打开但尚未关闭的文件流。 谁能给我解释一下?
提前致谢!
这是我的代码
public void SaveImage(Canvas canvas, int width, int height, string filePath)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(canvas);
double dpi = 96d;
RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, dpi, dpi, System.Windows.Media.PixelFormats.Default);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(canvas);
dc.DrawRectangle(vb, null, new Rect(new Point(), bounds.Size));
}
rtb.Render(dv);
BmpBitmapEncoder image = new BmpBitmapEncoder();
image.Frames.Add(BitmapFrame.Create(rtb));
using (Stream fs = File.Create(filePath))
{
image.Save(fs);
fs.Close();
}
}
private void btnSave_Click(object sender, RoutedEventArgs e)
{
int width = (int)myCanvas.ActualWidth;
int height = (int)myCanvas.ActualHeight;
string filePath = "TestImage.bmp";
SaveImage(myCanvas, width, height, filePath);
}
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri(@"TestImage.bmp", UriKind.Relative);
BitmapImage bmi = new BitmapImage(uri);
ImageBrush brush = new ImageBrush();
brush.ImageSource = bmi;
myCanvas.Background = brush;
}
【问题讨论】: