之前,我利用C#与GDI+程序制作过正圆形公章(利用C#制作公章 ,C#制作公章[续])并将它集成到一个小软件中(个性印章及公章的画法及实现),今天我们来探讨一下WPF中如何制作正圆形公章。

先看大致效果:

图1

制作前,我们首先来分析技术难点和要点:
1、首先,我们需要设置公章的起始位置,公章的直径等。
2、再根据这些来确定公章的中心点。有了中心点之后,我们才可以计算中间正五角星的中心以及公章中文字的旋转中心点。
3、计算公章中每个文字的旋转角度,然后复制、复制、再复制。

从上图中可以看出,当文字为英文字母时,会有位置偏移问题,后面我将说明如何解决这种问题。最终解决结果类似于下图(注意字母A居于正中间):

图2

制作步骤:(这里只是相关XAML代码的展示,未含C#代码)

1. 首先画外面的正圆:
<Ellipse Margin="0,1,0,0" VerticalAlignment="Top" Height="248" Fill="{x:Null}" Stroke="#FFFF0000" x:Name="EllipseBorder" HorizontalAlignment="Left" Width="248" StrokeThickness="1"/>
这里没什么好说的,正圆的高、宽度均为248,边线使用#FFFF0000(红色),边框宽度为1,如果你认为外框还不够粗,可以将StrokeThickness设置为合适的值,比如2。

2. 制作一个公章文字作为“样本”。
先制作一个样本,后面的部分利用程序COPY即可。为了更方便讲述,我们先假设公章文字个数为奇数,这样,最中间的一个文字就正好放在圆形的正上方。如果公章文字个数不是奇数而是偶数,我们后面利用程序来做。
这里,制作正中间的文字,如下图的正中间最上方那个“科”字。
这是XAML代码:
<TextBlock RenderTransformOrigin="0.500,2.925" HorizontalAlignment="Left" Margin="104.333,4.332,0,0" x:Name="TopCenter" VerticalAlignment="Top" Width="36" Height="40" FontSize="36" Text="科" TextWrapping="Wrap" Foreground="#FFFF0000" TextAlignment="Center">
   <TextBlock.RenderTransform>
    <TransformGroup>
     <ScaleTransform ScaleX="0.8" ScaleY="1"/>
     <SkewTransform AngleX="0" AngleY="0"/>
     <RotateTransform Angle="0"/>
     <TranslateTransform X="0" Y="0"/>
    </TransformGroup>
   </TextBlock.RenderTransform>
  </TextBlock>

注意上面代码中的加粗部分:
(1)RenderTransformOrigin属性
它指明文字旋转的中心点。这里0.5,2.925是对文字的正常字身高而言的。这就意味着此值是旋转中心点(这里就是下图中正五角星之正中间所示的圆形白点处)在离TextBlock左上角相对于正常字身高的水平、垂直比率。请仔细观察下图旋转中心点相对于“科”字左上角的X,Y方向的比率。想想看,假如是在文字正中间进行旋转呢?(此时,RenderTransformOrigin属性值大致应该是0.5,0.5)

图3

(2)TextAlignment属性
它指明文字相对于TextBlock外框(它的宽度 Width="36",高度Height="40")的文本对齐位置。

(3)ScaleTransform:
这里有 ScaleX和ScaleY属性。其中,ScaleX控制文字的水平缩放比率,这里是"0.8",即缩放为正常FontSize字身的80%;同理,ScaleY控制文字的垂直方向的比率,这里是"1",即不缩放。

(4)RotateTransform:
它有一个 Angle属性,用来设置旋转的角度值,单位为“度”,一周为360度,不旋转时为0。这里为"0",表示不旋转。顺时针计算为正值,逆时针为负值。

3、按照“样本”,依葫芦画瓢。
由于下面的均使用C#代码进行控制,所以,我这里只是简单列出一个左下角的第一个公章文字的XAML代码:
<TextBlock RenderTransformOrigin="0.500,2.942" x:Name="TopCenter_Copy" Width="36" Height="40" FontSize="36" Text="科" TextWrapping="Wrap" Foreground="#FFFF0000" HorizontalAlignment="Left" Margin="105.667,6.333,0,0" VerticalAlignment="Top" TextAlignment="Center">
   <TextBlock.RenderTransform>
    <TransformGroup>
     <ScaleTransform ScaleX="0.8" ScaleY="1"/>
     <SkewTransform AngleX="0" AngleY="0"/>
     <RotateTransform Angle="-120"/>
     <TranslateTransform X="0" Y="0"/>
    </TransformGroup>
   </TextBlock.RenderTransform>
  </TextBlock>
(其他的文字我们在后面用C#代码进行控制)

4、画中间的正五角星:
<Path StrokeThickness="1.000000" Stroke="{x:Null}"  Fill="#FFFF0000" Data="F1 M 55.467773,1.628906 L 68.130859,40.893066 L 109.385742,40.802734 L 75.957031,64.979004 L 88.791016,104.187500 L 55.467773,79.865234 L 22.144531,104.187500 L 34.978516,64.979004 L 1.549805,40.802734 L 42.804688,40.893066 L 55.467773,1.628906 Z" Margin="68,68,0,0" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto" Height="Auto">
   <Path.RenderTransform>
    <TransformGroup>
     <ScaleTransform ScaleX="0.68" ScaleY="0.68"/>
     <SkewTransform AngleX="0" AngleY="0"/>
     <RotateTransform Angle="0"/>
     <TranslateTransform X="0" Y="0"/>
    </TransformGroup>
   </Path.RenderTransform>
  </Path>
这里使用了WPF中的Path,它相当于GDI+中的GraphicsPath,其中:
(1)Fill属性指定内部填充颜色,这里是红色(#FFFF0000),如果你对颜色不太了解,可以看看这篇《GDI+与WPF中的颜色简析》。
(2)Data属性设置路径的相关数据。
(3)上面还对路径进行了缩放,水平和垂直大小均缩放为原来的0.68倍。

接下来的问题是:如何用C#代码来进行自动控制?
因此,我们需要将上面的XAML代码转换为C#代码,并程序绘制上述未完成的部分。由于篇幅及时间限制,就在下一篇中讲述吧。

本文的后续版本:
WPF正圆形公章制作之2
  (http://blog.csdn.net/johnsuna/archive/2008/04/28/2336495.aspx)

在WPF中制作正圆形公章相关推荐

  1. WPF中制作带中国农历的万年历

    WPF中制作带中国农历的万年历 原文:WPF中制作带中国农历的万年历 本例应用.net 2.0中的ChineseLunisolarCalendar类,制作出带中国农历的万年历.  先看看效果图片(已缩 ...

  2. WPF中制作立体效果的文字或LOGO图形

    WPF中制作立体效果的文字或LOGO图形 原文:WPF中制作立体效果的文字或LOGO图形 较久之前,我曾写过一篇:"WPF绘制党徽(立体效果,Cool) "的博文.有感兴趣的朋友来 ...

  3. WPF中制作立体效果的文字或LOGO图形(续)

    原文:WPF中制作立体效果的文字或LOGO图形(续) 上篇"WPF中制作立体效果的文字或LOGO图形"(http://blog.csdn.net/johnsuna/archive/ ...

  4. 01.WPF中制作无边框窗体

    [引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBor ...

  5. WPF中桌面屏保的制作(主要代码)

    原文:WPF中桌面屏保的制作(主要代码) 制作要点: (1) 使用System.Windows.Threading.DispatcherTimer; (2) 将Window属性设置为:       t ...

  6. WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)

    原文:WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆) 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.欢迎转载.使用.重新发布,但务必保 ...

  7. [WPF]WPF中材质制作——图片和矢量图之争

    如果要做下面这样的一个东西作为背景.你会如何做呢? 图1. 目标背景效果 方案一,用PS画出来.然后把这个PNG图片作为背景色.这个方案可以,但是如果想让这个线的颜色可配置呢?如何线的粗细不确定呢?无 ...

  8. coreldraw带圈字符_CorelDRAW如何制作环绕圆形的路径文字

    论坛留言中,很多同学对CorelDRAW如何制作图章相关问题不是很了解,其实做印章最主要的就是文字沿路径排列的问题,CorelDRAW如何制作环绕圆形的路径文字,本文小编为大家做详细讲解,步骤不是很多 ...

  9. html中字在圆形上怎么写代码,绘制圆形在文档里面

    word里面绘制一个圆形后怎样在里面添加文字 在Word中要绘制一个圆形,可以在菜单栏的"插入"选项卡中,点击"形状"按钮下边的下拉三角箭头,在页面空白区域拖出 ...

最新文章

  1. 识别哈希算法类型hash-identifier
  2. Android动态获取权限
  3. 使用Helm优化Kubernetes下的研发体验:基础设施即代码
  4. 郑州大学计算机科学复试分数线,2021郑州大学考研复试线发布,计算机大涨,部分热门专业达406分...
  5. 自学python需要安装什么-Python自学之环境安装
  6. 论文笔记_S2D.45_ORBSLAM-Atlas: 一个稳健和精确的多建图系统
  7. sklearn 相似度矩阵_利用sklearn计算文本相似性
  8. (8)Redis-Cluster集群理论及实践【中】
  9. 基于MATLAB的电力系统短路故障分析与仿真
  10. 铁塔基站三相有功电能无线计量仪表外置互感器-安科瑞 顾月
  11. 矩阵快速幂 斐波那契数列
  12. 时序报告要看哪些指标
  13. matlab 交互界面设计
  14. Ubuntu解决text file busy
  15. React:开发者工具谷歌插件下载安装
  16. 无法完成操作,因为文件包含病毒或潜在的垃圾软件解决方案
  17. C语音:for循环实现n个数简单求和
  18. PHP开发一个小型商务网站
  19. 基于Video4Linux 的USB摄像头图像采集实现
  20. 牛根生经典语录-2011

热门文章

  1. 使用CANalyzer搭建LIN通信网络
  2. 文档协作的几种实现方式
  3. 利用公众号实现网页扫码登录
  4. 【花雕体验】09 行空板硬件控制pinpong库的系列测试(之二)
  5. Python考点大全
  6. 网络体系之TCP/IP模型
  7. CentOS7服务器软件安装——Tomcat
  8. android自动秒杀脚本,gg修改器执行脚本按键代码秒杀安卓
  9. 首发!最详细慧联TWS106-A6蓝牙耳机对比洛达1562A评测
  10. 淘宝美工设计视频教程云盘分享