【发布时间】:2015-10-14 21:34:04
【问题描述】:
我有一个非常简单的方法,它将签名作为点列表并将它们绘制为位图上的线。我想获取该位图并将其保存到文件中,但是当我调用 Save 方法时,我得到“GDI+ 中发生一般错误”并且没有内部异常。
这似乎是非常简单的代码,所以我不确定问题出在哪里。
using (var b = new Bitmap(width, height))
{
var g = Graphics.FromImage(b);
var lastPoint = points[0];
for (int i = 1; i < points.Length; i++)
{
var p = points[i];
// When the user takes the pen off the device, X/Y is set to -1
if ((lastPoint.X >= 0 || lastPoint.Y >= 0) && (p.X >= 0 || p.Y >= 0))
g.DrawLine(Pens.Black, lastPoint.X, lastPoint.Y, p.X, p.Y);
lastPoint = p;
}
g.Flush();
pictureBox.Image = b;
b.Save("C:\\test.bmp");
}
我尝试使用所有可能的 ImageFormats 进行保存,将图形对象放在 using 语句中,而且我什至尝试过:
using (var ms = new MemoryStream())
{
b.Save(ms, ImageFormats.Bmp); // And b.Save(ms, ImageFormats.MemoryBmp);
Image.FromStream(ms).Save("C:\\test.bmp");
}
奇怪的是,如果我删除 b.Save(或忽略异常),pictureBox 会完美显示图像。
任何帮助将不胜感激。
【问题讨论】:
-
您是否可能没有对该位置的写入权限?
-
g 在哪里被声明?在保存之前尝试处理它。保存到根驱动器不是一个好位置——Windows 可能会遇到安全问题。
-
对不起,我忘记了图形声明,我编辑了我的问题。我只是出于测试目的而写入根目录,但我确实拥有完全的写入权限。
-
好吧,你不应该拥有完全的写入权限,因为这被认为是操作系统领域。无论如何尝试不同的路径。
-
你不应该在 using 块中包含该位图,因为 PictureBox 正在尝试使用它。