首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>C#语言>如何使用C#制作公司的公章的实例代码
如何使用C#制作公司的公章的实例代码
来源: 发布时间:2008-08-22 发布人: 浏览: 人次   字体: [ ]  

          本文的重点在于探讨如何用C#来制作公司的公章,制作印章来说,主要是如何让字均匀的显示在弧线段上,那么一般的印章要么以圆或者椭圆为底图,不过这两者的算法大致相同,为了方便说明,如下就用相对简单的圆来举例说明,如果需要做椭圆的话,可以在我的基础上进行扩展,因为核心算法是一样的,相对于圆来说,椭圆求弧长以及各个字符的位置,这两点相对麻烦些,但是这两者都可找到相应的数学公式。 

这里首先提一点,我这篇文章部分借鉴了codeproject的一个例子,原文可以参看如下地址。

http://www.codeproject.com/vb/net/Text_on_Path_with_VBNET.asp

(说实话,这篇文章写得有些乱,而且对于buffer的操作近乎于疯狂) 

由于印章的实现相对于这篇文章来说,相对简单多了,而且规律性很强,因此我自己考虑重新组织算法进行实现。

那么实现一个印章,大致步骤如下。

1. 计算字符串总长度,以及各个字符的长度;

2. 计算出字符串的起始角度;

3. 求出每个字符的所在的点,以及相对于中心的角度;

4. 绘制每个字符。 

计算字符串总长度,以及各个字符的长度

这里需要用到“Graphics.MeasureString”和“Graphics.MeasureCharacterRanges”这两个方法,由于前者算出来的总长度有问题,所以需要后面进行重新计算(此外,这里我还考虑了字符最后显示方向)。

这部分的代码如下:

    /// <summary>

    /// Compute string total length and every char length

    /// </summary>

    /// <param name="sText"></param>

    /// <param name="g"></param>

    /// <param name="fCharWidth"></param>

    /// <param name="fIntervalWidth"></param>

    /// <returns></returns>

    private float ComputeStringLength( string sText, Graphics g, float[] fCharWidth,

        float fIntervalWidth,

        Char_Direction Direction )

    {

        // Init string format

        StringFormat sf = new StringFormat();

        sf.Trimming = StringTrimming.None;

        sf.FormatFlags = StringFormatFlags.NoClip | StringFormatFlags.NoWrap

            | StringFormatFlags.LineLimit;

       

        // Measure whole string length

        SizeF size = g.MeasureString( sText, _font, (int)_font.Style );

        RectangleF rect = new RectangleF( 0f,0f, size.Width, size.Height );

 

        // Measure every character size

        CharacterRange[] crs = new CharacterRange[sText.Length];

        for( int i = 0; i < sText.Length; i++ )

            crs[i] = new CharacterRange( i, 1 );

 

        // Reset string format

        sf.FormatFlags = StringFormatFlags.NoClip;

        sf.SetMeasurableCharacterRanges( crs );

        sf.Alignment = StringAlignment.Near;

 

        // Get every character size

        Region[] regs = g.MeasureCharacterRanges( sText,

            _font, rect, sf );

 

        // Re-compute whole string length with space interval width

        float fTotalWidth = 0f;

        for( int i = 0; i < regs.Length; i++ )

        {

            if( Direction == Char_Direction.Center || Direction == Char_Direction.OutSide )

                fCharWidth[i] = regs[i].GetBounds( g ).Width;

            else

                fCharWidth[i] = regs[i].GetBounds( g ).Height;

            fTotalWidth += fCharWidth[i] + fIntervalWidth;

        }

        fTotalWidth -= fIntervalWidth;//Remove the last interval width

 

        return fTotalWidth;

    }

 


共8页: 上一页 1 [2] [3] [4] [5] [6] [7] [8] 下一页
相 关 文 章   发布商链接
·NET编程实现在局域网之间互传文件的...
·C#开发中如何对SqlServer命名规范的...
·详解在c#语言中DateTime类的使用及其...
·小解c#中运行js代码实例
·探讨C#语言中??运算符的用法
·实例分析对比ref和out关键字的用法及...
·浅谈接口和抽象类的区别,加了自己的...
·什么是动态链接库?C#创建和调用DLL?
·C#如何调用C++写的动态链接库?
·C#语言基础之范型入门示例,附代码说...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·有助快速理解C#委托和事件之...
·C#泛型学习笔记总结
·c#语言从dbf数据库提取数据并
·C#编写控制线程的运行和线程...
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
·c#子线程控制进度条的一个简...
热 门 文 章
·c#中收发邮件处理代码(POP3,...
·C#如何获取文件路径中的文件...
·什么是c#深拷贝与浅拷贝及其...
·C#中关于四舍五入函数的讨论...
·c#中的ArrayList属性祥解及其...
·C#语言实现创建、删除和移动...
·快速进行List排序的通用方法...
·C#对timer类的使用操作代码
·String.Split 方法使用及其代...
·如何在c#中去掉字符串中的回...
·用C#编写ActiveX控件代码实例
·C#语言实现从XML文件导出数据...
·C#如何从文本文件读取信息并...
·浅谈接口和抽象类的区别,加...
·c#子线程控制进度条的一个简...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .