How to Fix this Error quot;A generic error occurred in GDI+quot;?(如何修复此错误“GDI+ 中发生一般错误?)
问题描述
Open An Image from default name and save it by default name.(overwrit it)
I need make graphics from Image("Default.jpg") that put it on picturebox1.image and draw some graphic on picurebox1.(it works and it is not my problem) But I can't save picturebox1.Image overwrite on "Default.jpg"(this is My problem).If I change the save name it work but I need to overwrite it and open it manytimes. Thank You
Boolean Play = false;
Pen P = new Pen(Color.Black, 2);
Graphics Temp;
int X1, X2, Y1, Y2;
Image Default_Image = new Bitmap("Default.jpg");
public Form1()
{
InitializeComponent();
Temp = pictureBox1.CreateGraphics();
}
private void PictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (Play)
{
X2 = e.X;
Y2 = e.Y; ;
Temp.DrawLine(P, X1, Y1, X2, Y2);
pictureBox1.Image.Save("Default.jpg");
Play = false;
}
else
{
Default_Image = new Bitmap("Default.jpg");
Temp = Graphics.FromImage(Default_Image);
pictureBox1.Image =Default_Image;
X1 = e.X;
Y1 = e.Y;
Play = true;
}
}
{"A generic error occurred in GDI+."}
To overwrite an image you need to make sure no connections remain to it. Closing
, Disposing
or Cloning
are not quite enough...
Here is a function that creates a truly independent copy:
Bitmap GetClone(string imageName)
{
if (!File.Exists(imageName)) return null;
Bitmap bmp2 = null;
using (Bitmap bmp = (Bitmap)Bitmap.FromFile(imageName))
{
bmp2 = new Bitmap(bmp.Width, bmp.Height, bmp.PixelFormat);
bmp2.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);
using (Graphics g = Graphics.FromImage(bmp2))
{
g.DrawImage(bmp, 0, 0);
}
}
return bmp2;
}
Now you can do this:
string file = yourImageFileName;
Bitmap bmp = GetClone(file);
using (Graphics g = Graphics.FromImage(bmp))
{
// draw what you want..
g.DrawRectangle(Pens.Red, 11, 11, 199, 199);
}
bmp.Save(file, ImageFormat.Png); // use your own format etc..
You should also take care to not leak old PictureBox.Image
versions.. Here is a helper function:
void SetPBoxImage(PictureBox pbox, Bitmap bmp)
{
Bitmap dummy = (Bitmap)pbox.Image;
pbox.Image = null;
if (dummy != null) dummy.Dispose();
pbox.Image = bmp;
}
这篇关于如何修复此错误“GDI+ 中发生一般错误"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何修复此错误“GDI+ 中发生一般错误"?
基础教程推荐
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01