从png文件添加剪贴画

时间:2012-12-15 08:36:11

标签: c# bmp

我在将cliparts(从png文件)添加到bmp对象时遇到问题。我为jpeg图像添加了一些剪贴画,在我保存之后,我得到了一个错误:保存的图像中存在一些剪贴画,但有些没有。

以下是我为图像添加剪贴画的代码:

    using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(this._image))
        {
            gfx.CompositingMode = CompositingMode.SourceOver;
            gfx.CompositingQuality = CompositingQuality.HighQuality;
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;


            gfx.DrawImage(image, posX, posY, newWidth, newHeight);
            gfx.Save();
        }

anybode可以解释我做错了什么或为什么会出现这种情况?

编辑: 它发生在我在ASP.NET应用程序中使用此代码时,当我在Windows应用程序中使用它时一切都很好

1 个答案:

答案 0 :(得分:0)

我不确定这是否是您的问题的原因,但是行gfx.Save()不会将您绘制的图像保存回图像,而是保存Graphics对象的状态。为了将更改保存回图像,请务必调用Image.Save()方法并仔细检查以确保您没有在代码中的某处恢复上一个图像。有关Graphics.Save方法的更多信息,请访问:http://msdn.microsoft.com/en-us/library/system.drawing.graphics.save(v=vs.100).aspx

<强>更新

您在评论中写道,这是一个透明度问题。如果这是原因,请查看从文件加载剪贴画图像的代码。这也可能是由图像文件中使用的各种像素格式引起的。将您的图像加载算法更改为此类可能会解决问题:

  • 加载你的背景图片,让我们说这样做:Image backgroundImg = new Bitmap(backgroundImgPath);
  • 创建一个新的空图像作为所有图像的基础:this._image = new Bimap(backgroundImg.Width, backgroundImg.Height, PixelFormat.Format32bppArgb);
  • 使用backgroundImg
  • this._image的内容绘制到gfx.CompositingMode = CompositingMode.SourceCopy;
  • 然后,您可以在现在这样做时绘制剪贴画(只需注释掉gfx.Save();方法)

如果这有帮助,请告诉我。