【问题标题】:How to draw a tunnel-like effect?如何画出隧道般的效果?
【发布时间】:2015-09-29 12:44:42
【问题描述】:

我知道如何在 GDI 中绘制东西,但我发现很难确定如何绘制不仅仅是正方形和圆形的实际形状。

我正在尝试通过绘制一大堆相互重叠的正方形或矩形来绘制隧道,但我不知道如何正确定位。

这种效果怎么画?

【问题讨论】:

  • 你能澄清你的问题吗?添加一些代码示例以及结果的屏幕截图可能会有所帮助。
  • 好的,我会用截图更新我的问题。抱歉,我现在没有代码,因为我不知道从哪里开始(我确实尝试过编写一些代码,但还差得很远)

标签: c# .net winforms gdi+


【解决方案1】:

你可以试试这样的。一旦您了解了如何使用 GDI 进行绘图的基础知识,您应该能够非常轻松地完成此类操作。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Autodraw
{
    public partial class Form1 : Form
    {
        private bool canDraw;

        public class NPanel : Panel
        {
            protected override bool DoubleBuffered
            {
                get
                {
                    return base.DoubleBuffered;
                }

                set
                {
                    base.DoubleBuffered = true;
                }
            }
        }

        public NPanel nPanel = new NPanel();

        public Form1()
        {
            InitializeComponent();

            this.DoubleBuffered = true;
            panel = nPanel;
        }

        private void panel_Paint(object sender, PaintEventArgs e)
        {
            if (canDraw)
            {
                for (int r = 0; r <= 255; r++)
                {
                    e.Graphics.DrawRectangle(new Pen(Color.FromArgb(r, 0, 0), 1), r, r, r, r);
                }

                for (int r = 0; r <= 255; r++)
                {
                    e.Graphics.DrawRectangle(new Pen(Color.FromArgb(0, r, 0), 1), r, r, r, r);
                }

                for (int r = 0; r <= 255; r++)
                {
                    e.Graphics.DrawRectangle(new Pen(Color.FromArgb(0, 0, r), 1), r, r, r, r);
                }
            }
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            this.Refresh();
        }

        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(e.KeyChar == (char)Keys.Escape)
            {
                timer.Stop();
                canDraw = false;
            }
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            canDraw = true;
            timer.Start();
        }
    }
}

【讨论】:

  • 此示例假定您的 Form 上有一个名为 panelPanel
  • 哇,谢谢,这正是我在脑海中的想象。你怎么知道我要求的正是这个?我需要为此代码提供归属吗?
  • 嗯,你说的是“重叠的矩形”,因为这在几年前曾经是很常见的效果,所以首先想到的是。有关归属,请查看此页面:stackoverflow.com/help/licensing
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 2021-05-23
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多