用C#制作印章

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

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

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

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

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

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

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

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

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

4.绘制每个字符。

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

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

这部分的代码如下:

Code

[copy to clipboard]

CODE:

/// <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 = 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 = regs.GetBounds( g ).Width;
      else
        fCharWidth = regs.GetBounds( g ).Height;
      fTotalWidth += fCharWidth + fIntervalWidth;
    }
    fTotalWidth -= fIntervalWidth;//Remove the last interval width
    return fTotalWidth;
  }

时间: 2024-09-22 16:29:16

用C#制作印章的相关文章

用Flash简单制作印章动画视觉效果

用Flash简单制作印章动画视觉效果,印章效果动画,效果不错! 效果: Flash动画源文件下载:点击这里下载源文件 制作步骤:

ps如何制作印章

在一些高调色彩的照片中,背景有较大的白色空间,构图不相称给人感觉空洞无物.这时如象画图一样在空间处盖一红色的印章,可能其结果会大有改观.下面我给大家介绍用PS制作印章的方法,很方便的把自己心仪的印章盖上. 用PS制作印章有二种方法,一是如果你是篆刻的爱好者或已有一枚心爱的印章或可篆刻一枚;二是什么都没有,也可利用PS工具制作.先介绍第一种方法: 第一步:1.端端正正把已有的印章钎盖在纸上; 2.用照相机翻拍或复印钎盖纸上的印章; 3.进入PS软件,打开印章文件. 第二步:调出"图像/调整/曲线&

photoshop 制作印章效果

先看看效果图:photoshop 制作印章效果 在很多告假的文件中经常用,我以前公司就是这样做的. 效果还行吧. 先建一个文档,输入文字. 创建矩形选区,描边.   进入通道,填充白色.   滤镜-像素化-铜牌雕   按ctrl+键点击通道1  

美图秀秀怎么制作印章 印章制作方法

给各位美图秀秀软件的使用者们来详细的解析分享一下印章的制作方法. 方法分享: 效果图   1.新建一张红色的画布   2.添加文字,这里我们使用竖排的效果,将所有素材合并   3.将图片剪裁成合适的大小   4.使用一些纹理,增加效果,保存起来就ok了   好了,以上的信息就是小编给各位美图秀秀的这一款软件的使用者们带来的详细的印章的制作方法解析分享的全部内容了,各位看到这里的使用者们,小编相信你们现在是非常的清楚了制作方法了吧,那么各位现在就快去按照小编分享的教程自己去制作吧.

sedwen怎样制作印章图片

  1.打开软件,如图界面所示!会有默认的章,你可以修改,另外其他形状的章可以在软件菜单栏的选项中看到选择! 2.对章的外框,你可以设置边线框的线宽,高度,宽度等等,另外的内线,图符,等等都可修改,可自测.调完成后,在纹理处打勾就会显示效果了 3.打开文本1,可以修改章的主要文字,打开文本3可以修改底部的文字,你可以填写诸如公章的编码或者自己diy的文字(可以选择加粗及文字大小的设置) 4.做好章后可以存入印章库以便之后编辑,或者可以应用于文档 5.打开一个word文档,插入-->图片,插入图片

Phtoshop制作印章效果

  其实几年前写过一篇PS印章教程,如今百度还能搜索到.不过相比之下,这个Photoshop印章教程要更突出细节,相对来说,也更真实一些 分类: PS入门教程

Excel怎么制作印章?Excel制作印章的方法

1.我们打开excel中然后打开空表,点击菜单上的"插入"-->"形状"找个圆形吧 2.然后我们按下Shift再用鼠标拖出一个圆出来,如下图所示. 3.现在我们选中圆再右击然后填充色彩了 ,填红色.   4.同样的,再画一个圆,稍小于上图的圆.然后更改填充色为白色,线条色为红色. 5.现在我们在圆中输入文字,然后把文字也设置为红色了.   6.然后我们把文字设置为半圆了,我们在"格式"-->文本效果-->转换下面如图所示. 7.

美图秀秀制作印章的图文教程

印章效果图 1.我们打开美图秀秀,然后点击创建一个 一张红色的画布 如下 2.然后我们使用竖排效果来添加文字 再把将所有素材合并 打开进入 3.现在我们再把图片剪裁成合适的大小 4.好了现在有效果了,我们只要再加一些 纹理,增加效果,保存就可以了 好了这个非常的简单的呀.

PS简单制作印章效果

打上文字再新建图层选择笔刷工具 选择红色标注的笔刷在需要处理的地方点画笔稍微大些不要太小 再点击该图层成为选区,选择文字图层删除即可效果如下         注:更多请关注photoshop教程栏目,三联PS教程群:181754111欢迎你的加入 分类: PS入门教程