• Spicy Chicken GDI in C#


    1.Draw Directly  XXXX  ……

    2.Memory + DrawImage  XXX   > 5fps

    3.Memory + BitBlt  XX  > 15fps

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Linq;
    
    namespace Yozora
    {
        public struct Dot
        {
            public float X, Y;
            public float Vx, Vy;
            public float Radius;
            public Color Color;       
    
            static Random random = new Random((int)DateTime.Now.ToBinary());
    
            public Dot(int width, int height, Color color)
            {
                X = (float)random.NextDouble() * width;
                Y = (float)random.NextDouble() * height;
                Vx = -0.5f + (float)random.NextDouble();
                Vy = -0.5f + (float)random.NextDouble();
                Radius = (float)random.NextDouble() * 2;
                Color = color;
            }
        }
    
        public class DotMgr
        {
            private Dot[] dot_array_;
    
            //the width of lines
            private Int32 b_ = 1;
            //the quanlity of dots
            private float d_ = 0.2f;
            //the origin and bitmap graphics
            private Graphics dst_g_, mmr_g_;
            //
            private Bitmap m_;
            //width
            private Int32 w_ = 1920;
            //height
            private Int32 h_ = 1200;
            //the limit of fps
            private Int32 f_ = 24;
            //the quanlity of stars
            private float s_ = 0.2f;
            //the lines of stars
            private Int32 l_ = 5;
            private IntPtr mmr_dc_ = IntPtr.Zero;
            private IntPtr dst_dc_ = IntPtr.Zero;
            public bool ok = true;
    
            public Inf Init(Graphics g, Int32 width, Int32 height, Int32 frame, float stars, float dots)
            {
                dst_g_ = g;
                w_ = width;
                h_ = height;
                f_ = frame;
                s_ = stars;
                d_ = dots;
                m_ = new Bitmap(w_, h_);
                mmr_g_ = Graphics.FromImage(m_);
                dst_g_.Clear(Color.Black);
                mmr_dc_ = mmr_g_.GetHdc();
                dst_dc_ = dst_g_.GetHdc();
                mmr_g_.ReleaseHdc();
                return new Inf(0, "success init.");
            }
    
            public void CreateDots()
            {
    
            }
            
            public Inf DrawStar()
            {
                Inf inf = new Inf(2, "start drawing");
                mmr_g_.FillRectangle(new SolidBrush(Color.FromArgb(255, 0, 0 ,0)), 0, 0, w_, h_);
                Int32 x, y, r1, r2;
                Int32 angle = 180 / l_;
                Int32 l = l_ * 2;
                Point[] star = new Point[l+1];
                Color color;
                Pen p;
                Random rnd = new Random();
                
                for (Int32 i = 0; i < w_ * s_; ++i)
                {
                    x = rnd.Next(10, w_ - 10);
                    y = rnd.Next(10, h_ - 10);
                    // ?
                    r1 = rnd.Next(4, 7);
                    r2 = rnd.Next(8, 12);
                    color = Color.FromArgb(240, rnd.Next(1, 254), rnd.Next(1, 254), rnd.Next(1, 254));
                    p = new Pen(color, b_);
                    for (Int32 j = 0; j < l+1; ++j)
                    {
                        star[j].X = Convert.ToInt32(Math.Round(j % 2 == 0 ? (x + r1 * Math.Cos(j * 3.14159 / l_)) : (x + r2 * Math.Cos(j * 3.14159 / l_)), 2, MidpointRounding.AwayFromZero));
                        star[j].Y = Convert.ToInt32(Math.Round(j % 2 == 0 ? (y + r1 * Math.Sin(j * 3.14159 / l_)) : (y + r2 * Math.Sin(j * 3.14159 / l_)), 2, MidpointRounding.AwayFromZero));
                    }
                    mmr_g_.DrawLines(p, star);
    
                    if (rnd.Next(0, 100) > 50)
                        mmr_g_.FillPolygon(new SolidBrush(color), star);
                }
                ok = true;
           //spciy chicken W32.SelectObject(mmr_dc_, m_.GetHbitmap()); W32.BitBlt(dst_dc_,
    0, 0, w_, h_, mmr_dc_, 0, 0, W32.SRCCOPY); return new Inf(1, "draw successfully!"); } } }
  • 相关阅读:
    HTTP解析
    Java设计模式8:迭代器模式
    Java设计模式7:适配器模式
    Sharepoint 开启发布功能的PowerShell
    How to Limit NodeRunner.exe High Memory, CPU Usage
    sharepoint 2013 网站集解锁
    SharePoint Set-SPUser 命令拒绝访问
    SharePoint 列表视图修改多行文本字段显示长度
    SharePoint 修改项目的new图标显示天数
    SharePoint 压缩打包文件代码分享
  • 原文地址:https://www.cnblogs.com/maikaze/p/6476944.html
Copyright © 2020-2023  润新知