簡體   English   中英

圍繞矩形繪圖而不是填充矩形?

[英]Drawing around the rectangle instead of filling it?

我正在制作一個截圖程序供個人使用,其中包含一些很酷的功能。

我可以通過一個按鈕選擇屏幕。 我制作了一個紅色矩形,該矩形繪制在跟隨鼠標的第二種形式(不透明度為0.5)上。 一切正常。

我現在正在努力尋找一種方法來將不透明度保持在0.5(這樣我得到白色覆蓋),同時使矩形透明,以便可以看到類似的屏幕(沒有第二種形式的不透明度)。

基本上,我想在紅色矩形周圍繪制非常淺的白色,如下所示: https : //i.imgur.com/YFztY84.png ,而我的程序這樣做: https : //i.imgur.com/9FbYvfU.png

private void Selection()
{
    Hide();
    form2 = new Form();
    form2.Opacity = .5;
    form2.Cursor = Cursors.Cross;
    form2.ControlBox = false;
    form2.MaximizeBox = false;
    form2.MinimizeBox = false;
    form2.FormBorderStyle = FormBorderStyle.None;
    form2.WindowState = FormWindowState.Maximized;
    form2.MouseDown += form2_MouseDown;
    form2.MouseMove += form2_MouseMove;
    form2.Paint += form2_Paint;
    form2.MouseUp += form2_MouseUp;

    form2.Show();
}

        void form2_MouseDown(object sender, MouseEventArgs e)
        {
            MD = e.Location;
        }

        void form2_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left) return;
            Point MM = e.Location;
            rect = new Rectangle(Math.Min(MD.X, MM.X), Math.Min(MD.Y, MM.Y), Math.Abs(MD.X - MM.X), Math.Abs(MD.Y - MM.Y));
            form2.Invalidate();
        }

        void form2_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.SmoothingMode = SmoothingMode.HighSpeed;
            if (rect != null && rect.Width > 0 && rect.Height > 0)
            {
                e.Graphics.DrawRectangle(Pens.Red, rect);
            }
        }

        void form2_MouseUp(object sender, MouseEventArgs e)
        {
            form2.Hide();
            Screen scr = Screen.AllScreens[0];
            Bitmap bmp = new Bitmap(rect.Width, rect.Height);
            using (Graphics G = Graphics.FromImage(bmp))
            {
                G.CopyFromScreen(rect.Location, Point.Empty, rect.Size, CopyPixelOperation.SourceCopy);
                pictureBox1.Image = bmp;
                bmp.Save(System.IO.Path.GetTempPath() + "tempOnra2.png");
                Clipboard.SetImage(pictureBox1.Image);
            }
            form2.Close();
            Show();
        }

您還應該保留主圖像(尚未應用50%白色透明度的圖像,並在紅色矩形內繪制原始圖像:

例如,如果主圖像是original圖像並且已overlayed ,則覆蓋一個:

 Pen pen = Pens.Red;
 e.Graphics.DrawRectangle(pen, rect);
 if(rect.Width - pen.Width * 2 > 0 && rect.Height - pen.Width * 2 > 0)
 {
      Rectangle rect2 = new Rectangle(rect.X + pen.Width, Rect.Y + Pen.Width, rect.Width - pen.Width * 2, rect.Height - pen.Width * 2);
      e.Graphics.DrawImage(original, rext2, rect2, GraphicsUnit.Pixels);
 }

圍繞中心矩形繪制四個矩形:

+---------------------------------+
|                                 |
|                                 |
+------+-------------------+------+
|      |                   |      |
|      |                   |      |
|      |                   |      |
|      |                   |      |
|      |                   |      |
+------+-------------------+------+
|                                 |
|                                 |
+---------------------------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM