zoukankan      html  css  js  c++  java
  • PCB Genesis增加点阵字 实现原理

    我们采用Genesis增加点阵字时,用Genesis增加Canned Text即可,但奥宝中文不支持,且字符种类是有限的呀

    不过没关系,没有自己造呀。在这里我分享一种增加点阵字的实现方法

    一.通过代码增加点阵字效果

    二.实现代码

            private void button1_Click(object sender, EventArgs e)
            {
                add Add = new add();
                Font font = new Font("宋体", 12);
                Add.text_dot(font, "pcbren共赢加油");
    
            }
            /// <summary>
            /// 增加点阵字
            /// </summary>
            /// <param name="font"></param>
            /// <param name="text"></param>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <param name="symbols_size"></param>
            /// <param name="symbol"></param>
            /// <param name="scale"></param>
            public void text_dot(Font font, string text = "pcbren", double x = 0, double y = 0, double symbols_size = 500, string symbol = "r", double scale = 1)
            {
    
                y += 10;
                int txt_space = 12;
                double txt_sum = 0;
                foreach (char strt in text)
                {
                    if (strt >= 0x4e00 && strt <= 0x9fbb)
                        txt_space = 12;
                    else
                        txt_space = 8;
                    bool[,] data = calc.text_dot_array(font, strt.ToString());
                    for (int i = 0; i <= data.GetLength(0) - 1; i++)
                    {
                        for (int j = 0; j <= data.GetLength(0) - 1; j++)
                        {
                            if (data[i, j])
                            {
                                pad(i * scale + txt_sum, y * scale - j * scale, symbols_size, symbol);
                            }
                        }
                    }
                    txt_sum += txt_space * scale;
                }
            }
            /// <summary>
            /// 计算文字点阵列
            /// </summary>
            /// <param name="font"></param>
            /// <param name="text"></param>
            /// <returns></returns>
            public static bool[,] text_dot_array(Font font, string text = "pcbren")
            {
                int array_count = 20;
                bool[,] data = new bool[array_count, array_count];
                Bitmap bmp = new Bitmap(array_count, array_count);
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(Color.White);
                g.DrawString(text, font, Brushes.Black, 0, 0);
                StringBuilder sb = new StringBuilder();
                for (int y = 0; y < array_count; y++)
                {
                    sb.Append("
    ");
                    for (int x = 0; x < array_count; x++)
                    {
                        if (bmp.GetPixel(x, y).GetBrightness() > 0.5f)
                        {
                            sb.Append(" ");
                            data[x, y] = false;
                        }
                        else
                        {
                            sb.Append("#");
                            data[x, y] = true;
                        }
                    }
                }
                return data;
            }
  • 相关阅读:
    方法的重载理解
    JAVA 三种循环的总结
    模拟时间倒计时
    制作漂浮广告效果
    js+css+html实现抽奖小程序
    将系统时间转换为汉字表示的四种方法
    简单的导航栏
    模仿光标闪烁,光标移动,自动切换背景
    sublime插件emmet安装和使用
    现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。
  • 原文地址:https://www.cnblogs.com/pcbren/p/9435817.html
Copyright © 2011-2022 走看看