我有这个代码
private void saveImage()
{
Bitmap bmp1 = new Bitmap(pictureBox.Image);
bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
// Dispose of the image files.
bmp1.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我已经在我的驱动器"c:\"上有一个图像t.jpg.
我希望每次程序运行时都用新图像替换它.但是GDI +错误显示
我怎么能解决它?
Chu*_*ris 36
如果图像已存在,则必须将其删除.
private void saveImage()
{
Bitmap bmp1 = new Bitmap(pictureBox.Image);
if(System.IO.File.Exists("c:\\t.jpg"))
System.IO.File.Delete("c:\\t.jpg");
bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
// Dispose of the image files.
bmp1.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
我假设您之前使用 Image.Load 方法加载了 c:\t.jpg 图像。如果是这样,则 Image 对象持有图像文件的打开文件句柄,这意味着该文件无法被覆盖。
不要使用 Image.Load 获取原始图像,而是从您创建和处置的 FileStream 加载它。
所以,而不是
Image image = Image.Load(@"c:\\t.jpg");
Run Code Online (Sandbox Code Playgroud)
做这个:
using(FileStream fs = new FileStream(@"c:\\t.jpg", FileMode.Open))
{
pictureBox.Image = Image.FromStream(fs);
fs.Close();
}
Run Code Online (Sandbox Code Playgroud)
文件句柄已被释放,因此使用 Bitmap.Save 覆盖文件可以成功。因此,您在问题中给出的代码应该有效。保存前无需删除原始文件或处理图像。
另外:如果像上面那样关闭 FileStream,则调用 Image.Save 将引发异常。请参阅此处:GDI+ 中 Bitmap.Save 方法发生一般错误
| 归档时间: |
|
| 查看次数: |
36918 次 |
| 最近记录: |