zoukankan      html  css  js  c++  java
  • csharp: 图片字符间距

    引用WINDOWS API:

            [DllImport("gdi32.dll", CharSet = CharSet.Auto)]
            public static extern int SetTextCharacterExtra(IntPtr hdc, int nCharExtra);//图片字符间距
            [DllImport("gdi32.dll")]
            public static extern bool DeleteObject(IntPtr handle);
            [DllImport("gdi32.dll")]
            public static extern IntPtr SelectObject(IntPtr hdc, IntPtr bmp);
    

     .NET 2.0

    /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            /// <param name="fontSpace"></param>
            private void pictureBox_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                Font font = new Font("宋体", 12.0F);
    
                Brush brush = Brushes.Red;
                string text2 = "涂聚文";
                IntPtr hdc = e.Graphics.GetHdc();
                SetTextCharacterExtra(hdc, 16); // 设置字符间距   
                e.Graphics.ReleaseHdc(hdc);
                e.Graphics.DrawString(text2, font, brush, 20, 25);//
    
                //pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
            }
    

     .NET 3.5以上:

     /// <summary>
            /// 图片的字符间距(只对中文,数字,字母,符号有效,在中文环境下,中文日文混排无效)
            /// 涂聚文
            /// .net3.0以上
            /// </summary>
            /// <param name="width">图片宽度</param>
            /// <param name="height">图片高度</param>
            /// <param name="space">字间距</param>
            /// <param name="strtext">要显示的文字</param>
            /// <returns>图片</returns>
            Bitmap CreateImageString(int width, int height,int space ,string strtext)
            {
                Bitmap image = new Bitmap(width, height);
                using (Graphics g = Graphics.FromImage(image))
                {
                    //绘制图片边框
                    //g.DrawRectangle(Pens.Black, 0, 0, width - 1, height - 1);
    
                    Font font = new Font("宋体", 12.0F);
    
                    Brush brush = Brushes.Red;
                    //绘制设置了字符间距的输出
                    DrawStringExtra(g, space, x =>
                    {
                        x.DrawString(strtext, font, brush, 0, 2);
                    });
                }
                return image;
            }
    
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="g"></param>
            /// <param name="nCharExtra"></param>
            /// <param name="action"></param>
            void DrawStringExtra(Graphics g, int nCharExtra, Action<Graphics> action)
            {
                IntPtr hdc = g.GetHdc();
                SetTextCharacterExtra(hdc, nCharExtra);
                try
                {
                    using (Graphics g1 = Graphics.FromHdc(hdc))
                    {
                        action(g1);
                    }
                }
                finally
                {
                    SetTextCharacterExtra(hdc, 0);
                    g.ReleaseHdc(hdc);
                }
            }
    

     调用:(可以应用于打印中)

     pictureBox1.Image = CreateImageStrin(100, 30, 10, "3315000"); 
    

     .net 2.0自写填空格来设置字间距,高版本有:Padding,PadRight,PadLeft

     /// <summary>
            /// 字符填充空格,而从设置字符间距
            /// 涂聚文
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public string SetPadstring(string str,int padwidth)
            {
                string s = string.Empty;
                string m = string.Empty;
                if (str.Length > 0)
                {
                    char[] arr = str.ToCharArray();
                    foreach (char d in arr)
                    {
                        //MessageBox.Show(d.ToString());
                        m = m + d + PadRight(padwidth);
                    }
                }
                s = m;
                return s;
            }
    
    
            /// <summary>
            /// 填充空格
            /// </summary>
            /// <param name="totalWidth"></param>
            /// <returns></returns>
            public string PadLeft(int totalWidth)
            {   
                    string s="";
    
                    if (totalWidth > 0)
                    {
                        for (int i = 0; i < totalWidth; i++)
                        {
                            s =" "+ s  ;
                        }
                    }
                    return s;
           }
    
            /// <summary>
           /// 填充空格
            /// </summary>
            /// <param name="TotalWidth"></param>
            /// <returns></returns>
            public string PadRight(int TotalWidth)
            {
                string s = "";
                if (TotalWidth > 0)
                {
                    for (int i = 0; i < TotalWidth; i++)
                    {
                        s = s + " ";
                    }
                }
    
                return s;
            }
    

      

    //测试
                
                string cs = "331500涂聚文";
                //char[] arr = cs.ToCharArray();
                //foreach (char d in arr)
                //{
                //    //MessageBox.Show(d.ToString());
                //    m = m + d+PadRight(1);
                //}
                //MessageBox.Show(m);
                MessageBox.Show(SetPadstring(cs, 1));
    

      

  • 相关阅读:
    mahout in Action研读(1)-给用户推荐图书
    工作的时候用到spring返回xml view查到此文章亲测可用
    Result Maps、Auto-mapping、cache
    MyBatis构建sql时动态传入表名以及字段名
    How to Write a Spelling Corrector用java 写拼写检查器 Java实现 以备查验
    245. Shortest Word Distance III
    244. Shortest Word Distance II
    243. Shortest Word Distance
    148. Sort List
    23. Merge k Sorted Lists
  • 原文地址:https://www.cnblogs.com/geovindu/p/4315410.html
Copyright © 2011-2022 走看看