当Magenta使用FillRectangle时,.net绘制到位图失败

时间:2010-12-06 16:45:43

标签: c# winforms

var bmp = new Bitmap(16, 16);
var gBmp = System.Drawing.Graphics.FromImage(bmp );
Color col = Color.FromArgb(pdmsCol.Red, pdmsCol.Green, pdmsCol.Blue);
gBmp.FillRectangle(new SolidBrush(col), new Rectangle(0, 0, 16, 16));
mColourPopupContainer.Image = bmp;

使用上面的代码将一个矩形绘制到我的控件中以获得给定的颜色。这种方法很好,除非颜色是洋红色,在这种情况下它似乎是透明的。我想这与将Magenta处理为透明的位图有关。如何关闭此行为?

mColourPopupContainer是一个UserControl(自定义颜色选择器)。

2 个答案:

答案 0 :(得分:2)

您需要将Form.TransparencyKey属性设置为Magenta以外的颜色。这个属性:

  

获取或设置表示表单透明区域的颜色。

默认情况下,它是洋红色,因此是您的问题。如果您将其设置为其他颜色不应该显示在表单上的任何其他位置,则问题应该消失。

答案 1 :(得分:0)

我目前的解决方案不是很好:检测何时使用洋红色并将其更改为不是洋红色

      var col = Color.FromArgb(r, g, b);
      if (r==255 && g==0 && b==255 ) col = Color.FromArgb(r-1, g, b); // Don't use Megenta as it can be treated as transparent