C#GRAPHICS强制覆盖像素

时间:2012-06-21 16:00:46

标签: c# graphics drawing 2d

我目前正在用C#Bitmaps和Graphics编写一个简单的图像处理器。我正在使用costum透明元素,它工作正常。在我的绘图方法中,我通过绘图来设置图像来更新控件:

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

现在我需要一个功能来擦除一些像素。在BackgroindImage上使用Form和绘图我可以使用TransparencyKey-Prperty“擦除”像素。但是这种保护并不存在于我的控制中。这就是我使用“attr.SetColorKey(this.transpKey,this.transpKey);”的原因,但是存在问题。它只是使像素透明,并且可以看到像素下角 有谁知道如何强制C#替换像素而不是留下它们?或者有人知道我的问题的解决方案吗? 非常感谢你阅读,思考和帮助。

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

3 个答案:

答案 0 :(得分:0)

没有擦除,因为使用z顺序作为绘制顺序逐个绘制控件。首先,绘制表格背景,然后标签,然后是您的控件。没有LAYERS,一旦绘制出来,它就会留下来。

只有'删除'的方法就是找到一种控制方式,让你自己重新控制自己的某种缓冲区,你可以使用它。

我很久以前就试过了,并且放弃了这个方法,因为它实现起来很糟糕并且非常容易出错。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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