我在向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);
backgroundImgthis._image的内容绘制到gfx.CompositingMode = CompositingMode.SourceCopy;
然后,您可以像现在一样绘制剪贴画(只需注释掉gfx.Save();方法)


让我知道是否有帮助。

关于c# - 从png文件添加剪贴画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13890675/

10-11 19:12