在GDI+中发生了一个通用错误

本文关键字:一个 错误 GDI+ 发生了 | 更新日期: 2023-09-27 18:06:42

我正在开发一个图像合并项目。(图像组合)第一张前景图像位于背景图像的(0,0)位置。通过使用数字上下控制来改变位置。代码在

下面
private void nudXPositions_ValueChanged(object sender, EventArgs e)
    {
        {
            lock (typeof(FrmImageMerge))
            {
                nudXPositions.Maximum = imgBackWidth;
                if (pbMergeImagePreview.Image != null)
                    pbMergeImagePreview.Image.Dispose();
                pbMergeImagePreview.InitialImage = null;
                posX = decimal.ToInt16(nudXPositions.Value);
                posY = decimal.ToInt16(nudYPosition.Value);
                MergeImages(tbxBackImage.Text, tbxForeImage.Text);
                lblMergeImagePreview.Text = "";
                pbBackgroundImagePreview.Refresh();
                try
                {
                  Thread.Sleep(100);
                    Image image1 = Image.FromFile(tempName);
                    this.pbMergeImagePreview.Image = image1;
                    pbBackgroundImagePreview.Refresh();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                btnSaveImageAs.Enabled = true;
            }
        }
    }

则调用MergeImage()方法。该方法在

下面
 private void MergeImages(string ImageBack,string ImageFore)
    {
         pbMergeImagePreview.Image = null;
         pbMergeImagePreview.Refresh();
        // try
         //{
             backExtension = Path.GetExtension(tbxBackImage.Text);
            System.Drawing.Graphics myGraphic = null;
             Image imgB;
             imgB = Image.FromFile(ImageBack);
             Image imgF;
             imgF = Image.FromFile(ImageFore);
            Image m;
            m = Image.FromFile(ImageBack);
            myGraphic = System.Drawing.Graphics.FromImage(m);
            myGraphic.DrawImageUnscaled(imgB,0,0);
             myGraphic.DrawImageUnscaled(imgF,posX,posY);
            myGraphic.Save();
            getMyDocument = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
           tempName = string.Format("{0}{1}{2}{3}{4}{5}",getMyDocument,"''","Merge Image","''","Imageback",backExtension);
     if (File.Exists(tempName))
        {
             File.Delete(tempName);
         }
        m.Save(tempName);       
               imgB.Dispose();
               imgF.Dispose();
               m.Dispose();
               myGraphic.Dispose();

         //}
        //catch (Exception ex)
    //  {
    //      MessageBox.Show(ex.Message);
    //}
   }

程序执行时,改变位置时,前像根据位置变化。它被保存为一个临时图像。然后,如果我们再次改变位置临时图像被重新创建,它取代旧的图像。但是当我做这个过程一段时间后,会有一个例外;" externalexception has Occurred"。此外,这是一个"在GDI+中发生的通用错误"。我试了很多,搜索浏览器。如果我不能解决我的问题。谢谢你

在GDI+中发生了一个通用错误

GDI+中的通用错误是一个可怕的错误,因为它没有给出发生错误的信息。

然而,一个常见的原因是从文件中加载位图会使文件保持打开状态,因此任何后续打开它的尝试都会导致Access Denied

参见以下相关答案:
GDI+
中出现了一个通用错误-通用GDI+ Error

只要在StackOverflow中搜索"Generic Error GDI+",你会发现相当多的点击。

相关文章: