首页 > 编程语言 >C# GDI+ 画心形 跳动动画

C# GDI+ 画心形 跳动动画

时间:2022-11-09 22:23:49浏览次数:60  
标签:set get C# 心形 private int iZoom GDI

最近听说什么国产神剧的期中考试画心形题很火,打算跟风用C#复刻一下

先看看效果:

话不多说直接上代码

        public Form1()
        {
            DoubleBuffered = true;  //首先窗体记得设置双缓冲
            SetStyle(ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
            InitializeComponent();
        }
        /// <summary>
        /// 是否反向
        /// </summary>
        private bool goBack = false;
        /// <summary>
        /// 当前跳动动画缩放倍率
        /// </summary>
        private int iZoom = 10;
        /// <summary>
        /// 跳动速度
        /// </summary>
        private int Speed { get; set; } = 8;
        /// <summary>
        /// 绘制笔刷颜色
        /// </summary>
        private Brush Color { get; set; } = Brushes.LightPink;
        /// <summary>
        /// 中心缩放倍率
        /// </summary>
        private int Zoom { get; set; } = 10;
        /// <summary>
        /// 点数量(包括心形边线和粒子)
        /// </summary>
        private int Particle { get; set; } = 20;
        /// <summary>
        /// 一次扩散范围
        /// </summary>
        private int FirstDiffusion { get; set; } = 10;
        /// <summary>
        /// 二次扩散范围
        /// </summary>
        private int SecondDiffusion { get; set; } = 30;

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            iZoom += goBack ? -1 : 1;
            if (iZoom >= (Zoom + 2) || iZoom <= (Zoom - 3))
                goBack = !goBack;
            Bitmap bmp = new Bitmap(Width, Height);
            Graphics g = Graphics.FromImage(bmp);  //如果想看到绘制的过程可以使用 e.Graphics 直接绘制在窗体上而不是绘制在图片中再替换背景
            Random random = new Random();
            for (int i = 0; i < Particle * 100; i++)
            {
                double t = random.NextDouble() * 2 * Math.PI;
                double x = 16 * (Math.Pow(Math.Sin(t), 3));  //心形曲线函数X
                double y = -(13 * Math.Cos(t) - 5 * Math.Cos(2 * t) - 2 * Math.Cos(3 * t) - Math.Cos(4 * t));  //心形曲线函数Y
                x *= iZoom;
                y *= iZoom;
                x += Width / 2;
                y += Height / 2;
                g.FillEllipse(Color, new Rectangle((int)x, (int)y, 10, 10));  //在随机到的心形函数路径上添加点
                if (i % 2 == 0)  //控制扩散点的数量
                {
                    Random random2 = new Random();
                    int add1 = random2.Next(-FirstDiffusion, FirstDiffusion);
                    int add2 = random2.Next(-FirstDiffusion, FirstDiffusion);
                    g.FillEllipse(Color, new Rectangle((int)x + add1, (int)y + add2, 5, 5));  //一次扩散的点
                    g.FillEllipse(Color, new Rectangle((int)x + add1, (int)y + add2, 5, 5));
                }
                if (i % 3 == 0)
                {
                    Random random2 = new Random();
                    int add1 = random2.Next(-SecondDiffusion, SecondDiffusion);
                    int add2 = random2.Next(-SecondDiffusion, SecondDiffusion);
                    g.FillEllipse(Color, new Rectangle((int)x + add1, (int)y + add2, 5, 5));  //二次扩散的点
                    g.FillEllipse(Color, new Rectangle((int)x + add1, (int)y + add2, 5, 5));
                }
            }
            BackgroundImage = bmp;
            Thread.Sleep((10 - Speed) * 10);
        }
    }
}

最后添加一个设置界面,使得功能多样化一点:

源码:
附件

标签:set,get,C#,心形,private,int,iZoom,GDI
From: https://www.cnblogs.com/Alex1911/p/16875349.html

相关文章

  • C++面经:C++多态-----虚函数、虚函数表、虚函数指针、虚继承
    1.虚函数引入类中之后,类会发生什么变化?首先我们创建一个空类A,然后创建一个类的对象a,并打印它的占用空间大小---为1   我们再往类中添加两个成员函数后,再返回对象......
  • [RoarCTF 2019]Easy Calc
    先打开题目发现是一个计算器,先输入1+1,输出2   先判断是否是SQL注入,发现并没有任何变换Ctrl+u查看源代码,发现提示信息,有waf,发现参数是传到calc.php,num值的加密,在......
  • 将excel数据分到不同的sheet中
    importpandasaspddf=pd.read_excel("all_faq.xlsx")washer=pd.DataFrame()#洗衣机vacuum_cleaner=pd.DataFrame()#吸尘器Water_purifier=pd.DataFra......
  • [转载学习] Verilog-SystemVerilog中的force和release语法
    Verilog-SystemVerilog中的force和release语法本文属于转载,版权属于原博主—狮子座硅农(LeoICer)&星星在人间,博客原地址https://blog.csdn.net/qianniuwei321/article/de......
  • JavaScript
    1、什么是JavaScript?JavaScript是一门世界上最流行的脚本语言严格检查:'usestrict'<script>'usestrict'//必须放在第一方行leti=1;</script>2、数据......
  • HDU 1828 Picture
    ProblemDescriptionAnumberofrectangularposters,photographsandotherpicturesofthesameshapearepastedonawall.Theirsidesareallvertical......
  • ncl 常用绘图属性之常规设置
    wks_type="png"wks_type@wkWidth=2500;设置分辨率wks_type@wkHeight=2500res=Trueres@tmXTOn......
  • Python在CentOS上编译安装
    Python在CentOS上编译安装CentOS71.*安装前准备1.*.&下载安装包点击查看代码$yuminstall-yzlib-develbzip2-developenssl-develxz-libswget1.*.&下载......
  • DHCP 的相关概念
    1、DHCP(动态主机配置协议)----------->为TCP/IP网络分配TCP/IP参数(IP、NetMask、GateWay、DNS)2、DHCP的优点:    减少管理员的工作量    避免输入......
  • Netty(一)深入理解网络通信和TCP/IP协议
    一、前言为什么要学Netty?实话说工作中真正用到netty开发的场景可能不算特别多,但是为啥要学这玩意呢?有一说一,变强的路上技能可以用不到,但是不能没有~Java生态圈......