2

我在将剪贴画(来自 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();
        }

谁能解释我做错了什么或为什么会出现这种情况?

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

4

1 回答 1

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();方法)

让我知道这是否有帮助。

于 2012-12-15T09:12:29.900 回答