我在向bmp对象添加剪贴画(从png文件)时遇到问题。我将一些剪贴画添加到jpeg图像中,然后保存起来,结果有些mist跷:有些剪贴画存在于已保存的图像中,而有些则不存在。
这是我如何向图像添加剪贴画的代码:
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()
行不会将您绘制的图像保存回该图像,而是保存了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();
方法)
让我知道是否有帮助。
关于c# - 从png文件添加剪贴画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13890675/