我在将剪贴画(从 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 应用程序中使用它时一切都很好
我不确定这是否是您问题的原因,但是 gfx.Save()
行不会将您绘制的图像保存回图像,而是保存 的状态>图形
对象。为了将更改保存回图像,请确保调用 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);
- 使用
gfx.CompositingMode = CompositingMode.SourceCopy; 将 backgroundImg
的内容绘制到 this._image
上;
- 然后,您可以像现在一样绘制剪贴画(只需注释掉
gfx.Save();
方法)
如果这有帮助,请告诉我。
我是一名优秀的程序员,十分优秀!