C#在50%不透明形状上绘制的透明实心矩形

时间:2012-03-31 22:23:07

标签: c# transparency opacity

我一直试图模仿Windows 7 Snipping Tool如何用一个半透明的灰色层覆盖屏幕,这个灰色层在选择区域内变得完全透明。我已经非常接近了。我正在展示一个无边框的50%不透明灰色形状,覆盖整个屏幕,并有一个透明度的紫红色。然后在该表格的顶部绘制2个矩形。透明度的固体紫红色矩形和红色边框的另一个矩形。它有效,但只有当我做三件事之一时,其中没有一件是选择。

  1. 禁用双缓冲,使图形在绘制时闪烁
  2. 将桌面颜色模式从32位更改为16位
  3. 使表单100%不透明
  4. 这是我的代码。关于如何使其发挥作用的任何建议?

    public partial class frmBackground : Form
    {
        Rectangle rect;
    
        public frmBackground()
        {
            InitializeComponent();
    
            this.MouseDown += new MouseEventHandler(frmBackground_MouseDown);
            this.MouseMove += new MouseEventHandler(frmBackground_MouseMove);
            this.Paint += new PaintEventHandler(frmBackground_Paint);
            this.DoubleBuffered = true;
            this.Cursor = Cursors.Cross;
        }
    
        private void frmBackground_MouseDown(object sender, MouseEventArgs e)
        {
            Bitmap backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
            rect = new Rectangle(e.X, e.Y, 0, 0);
            this.Invalidate();
        }
    
        private void frmBackground_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                rect = new Rectangle(rect.Left, rect.Top, e.X - rect.Left, e.Y - rect.Top);
    
            this.Invalidate();
        }
    
        private void frmBackground_Paint(object sender, PaintEventArgs e)
        {
            Pen pen = new Pen(Color.Red, 3);
            e.Graphics.DrawRectangle(pen, rect);
    
            SolidBrush brush = new SolidBrush(Color.Fuchsia);
            e.Graphics.FillRectangle(brush, rect);
        }
    }
    

1 个答案:

答案 0 :(得分:0)

你可以使用

Brush brush = new SolidBrush(Color.FromArgb(alpha, red, green, blue))

其中alpha从0变为255,因此alpha值为128将为您提供50%的不实际效果。

this question

中找到了此解决方案