我想合并两个.png图像

时间:2011-08-10 04:05:13

标签: c#

我想合并两个.png图片。但是当我保存它们时,发生了一个错误,称为gdi +中发生了一般性错误。我想尽快继续我的项目。请帮我。感谢

private void MergeImages(string ImageBack,string ImageFore)
        {
            try
            {
            System.Drawing.Graphics myGraphic = null;
        Image imgB;// =new Image.FromFile(ImageBack);
        imgB = Image.FromFile(ImageBack);
            //FileInfo fileInfoBack = new FileInfo(ImageBack);

        Image imgF;// =new Image.FromFile(ImageBack);
        imgF = Image.FromFile(ImageFore);
        //Bitmap tempBitmap = new Bitmap(imgB.Width, imgB.Height,imgB.PixelFormat );
          //  tempBitmap.Save("a"+fileInfoBack.Extension);

        Image m;
        m = Image.FromFile(ImageBack);
      //  m = Image.FromFile("a" + fileInfoBack.Extension);
        myGraphic = System.Drawing.Graphics.FromImage(m);
        myGraphic.DrawImageUnscaled(imgB,0,0);
        myGraphic.DrawImageUnscaled(imgF,posX,posY);
        myGraphic.Save();


        m.Save(ImageBack.Replace(".jpg",".jpeg"),System.Drawing.Imaging.ImageFormat.Jpeg);
        //m.Save(ImageBack, System.Drawing.Imaging.ImageFormat.Png);
      // m.Save("d.png", System.Drawing.Imaging.ImageFormat.Png);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }

    private void btnFileProtector_Click(object sender, System.EventArgs e)
    {
        if (openFileDialog1.ShowDialog()==DialogResult.OK)
        {
            txtFileProtector.Text=openFileDialog1.FileName;
        }
    }

    private void btnFilesToProtect_Click(object sender, System.EventArgs e)
    {
        listFilesToProtect.Items.Clear();
        if (openFileDialog2.ShowDialog()==DialogResult.OK)
        {
            if (openFileDialog2.FileNames.Length>0)
            {
                for(int i=0;i<openFileDialog2.FileNames.Length;i++)
                {
                    listFilesToProtect.Items.Add(openFileDialog2.FileNames[i]);
                }
            }
        }
    }

    private void btnLoad2_Click(object sender, System.EventArgs e)
    {
        posX = int.Parse(textBox1.Text);
        posY = int.Parse(textBox2.Text);
       // heightBackImage = int.Parse(textBox3.Text);
       // widthBackImage = int.Parse(textBox4.Text);

        if (listFilesToProtect.Items.Count>0)
        {
            foreach(object it in listFilesToProtect.Items)
            {
                MergeImages(it.ToString(), txtFileProtector.Text);

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

你没有告诉我们抛出这个异常的行,所以我将在这里猜测。当您尝试加载/保存的图像的路径不正确时,通常会发生此错误,因此请检查ImageBackImageFore的路径。 还要确保您尝试加载/保存到的文件未被包括您的应用程序在内的其他进程打开。

这里值得一提的是,你应该在使用它们时处理图像/图形,例如使用using。喜欢

using(Image imgB = Image.FromFile(ImageBack))
{ 
    //the code that is using the imgB here
}