如何修复此错误“GDI+ 中发生一般错误"?

How to Fix this Error quot;A generic error occurred in GDI+quot;?(如何修复此错误“GDI+ 中发生一般错误?)
本文介绍了如何修复此错误“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+ 中发生一般错误"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)