1

我目前正在使用 C# Bitmaps und Graphics 编写一个简单的图像操纵器。我正在使用服装透明元素,它工作正常。在我的 Draw-Method 中,我通过绘制来更新控件以设置图像:

ImageAttributes attr = new ImageAttributes();  
attr.SetColorKey(this.transpKey, this.transpKey);  
Rectangle dstRect = new Rectangle(0, 0, this.image.Width, this.image.Height);  
e.Graphics.DrawImage(this.image, dstRect, 0, 0, this.image.Width, this.image.Height, GraphicsUnit.Pixel, attr);  
e.Graphics.Dispose();

现在我需要一个函数来擦除一些像素。使用 Form 并在 BackgroindImage 上绘图,我可以使用 TransparencyKey-Prperty “擦除”像素。但是这个属性在我的服装控制中不存在。这就是我使用“attr.SetColorKey(this.transpKey, this.transpKey);”的原因,但是问题就来了。它只是使像素透明,并且下面的像素将可见。
有谁知道如何强制 C# 替换像素而不是离开它们?或者有人知道我的问题的解决方案吗?
非常感谢您的阅读、思考和帮助。

//编辑:好的,现在我发现我可以使用“e.Graphics.CompositingMode = CompositingMode.SourceCopy;” 设置像素将被替换。但在那之后,透明度被破坏了。结果是一样的。什么都没有抹去。有什么解决办法吗?

4

3 回答 3

0

没有 ERASING,因为控件是一个一个地绘制的,使用 z-order 作为绘制顺序。首先,绘制表单背景,然后是标签,然后是您的控件。没有图层,一旦绘制了一些东西,它就会留下来。

'ERASE' 的唯一方法是找到一种方法,让您控制下的控件将自己重新绘制到您可以使用的某种缓冲区中。

我很久以前就尝试过,并且已经放弃了该方法,因为它实施起来很糟糕并且极易出错。

很抱歉这个坏消息,希望你能从我的经验中得到一些见解。

于 2012-06-21T19:15:16.510 回答
0

你对“擦除”的定义是什么?对我来说,这意味着将颜色更改为背景的颜色。不要使用透明度来做到这一点,只需以背景颜色渲染该区域。

于 2012-06-21T19:16:03.273 回答
0

正式提供我的解决方案:我通过使用多层来解决它。不干净但有效。

于 2012-08-27T10:48:16.283 回答