注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C# Graphics Programming笔记(二)  

2011-10-15 22:11:11|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天又出去跑了招聘会,参加了个笔试……累死我了。

华科规划很好,不过感觉没什么人气,总有股冷清的感觉,或许都在教室学习吧,呵呵。

接前面的,今天说说画笔和刷子的高级功能。

这本书依旧是红皮书系列的,由Rod Stephens编写,网上有电子版的,使用搜索引擎一下就能找到,不过只有英文版的,好在对英文水平要求不高,过了CET-4绝对可以无障碍阅读。全书分8个章节,从简单的图形对象、画笔、刷子到复杂的位图、图形变换、打印等技术,最后还描述了一个从WPF而来的强有力的对象:FlowDocument,虽然这本书不能做到面面俱到而又深动详实,但全书言简意赅,结构紧凑,从宏观的角度介绍了GDI+编程的原理和方法,是一本不错的GDI+编程入门书籍。

C Graphics Programming笔记(一) - Castor - 趁年轻,多折腾~~
=================================================================================

第二章    使用画笔和刷子的高级功能

自定义线条样式

PenDashStytle设置为Custom,然后将DashPattern属性设置为一个浮点数组。例如{4,1, 2,1}表示画4个单位,然后空一个单位,接着画两个单位,最后又空一个单位,如此反复。

private void Form1_Paint(object sender, PaintEventArgs e)

{

    Pen p = new Pen(Color.LimeGreen, 6f);

    p.DashStyle = DashStyle.Custom;

    p.DashPattern = new float[] { 4, 3, 2, 1 };

    e.Graphics.DrawLine(p, new Point(20, 20), new Point(300, 20));

    p.Dispose();

}

C Graphics Programming笔记(二) - Castor - 趁年轻,多折腾~~

纵向条纹

类似DashStytlePenCompoundArray属性能够调整纵向条纹。

private void Form1_Paint(object sender, PaintEventArgs e)

{

    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

    using (Pen p = new Pen(Color.Red, 20))

    {

        Point[] pts = {

                        new Point (20, 20),

                        new Point (120, 20),

                        new Point (70, 120)

                       };

        p.CompoundArray = new float[] { 0.0f, 0.4f, 0.6f, 1.0f };

        e.Graphics.DrawPolygon(p, pts);

        p.Color = Color.Green;

        p.CompoundArray = new float[] { 0.0f, 0.1f, 0.3f, 0.7f, 0.9f, 1.0f };

        e.Graphics.DrawEllipse(p, 150, 20, 100, 150);

    }

}

C Graphics Programming笔记(二) - Castor - 趁年轻,多折腾~~

 

注意数组中的数目要为偶数个,而且介于01之间,还要 按升序排列。

自定义线帽

StartCapEndCap决定了线条的起点和终点该如何绘制。设置PenCustomStartCapCustomEndCap属性为一个CustomLineCap即可实现。CustomLineCap类的构造函数接收GraphicsPath对象。

private void Form1_Paint(object sender, PaintEventArgs e)

{

    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

    Point[] pArr = new Point[5];

    pArr[0] = new Point(-2, 0);

    pArr[1] = new Point(-1, 1);

    pArr[2] = new Point(0, 0);

    pArr[3] = new Point(1, 1);

    pArr[4] = new Point(2, 0);

    GraphicsPath gp = new GraphicsPath();

    gp.AddLines(pArr);

    CustomLineCap clc = new CustomLineCap(null, gp);

    Pen p = new Pen(Color.Red, 5);

    p.CustomStartCap = clc;

    p.CustomEndCap = clc;

    e.Graphics.DrawLine(p, new Point(30, 30), new Point(200, 50));

}

C Graphics Programming笔记(二) - Castor - 趁年轻,多折腾~~

 请注意线帽的样式。

线性渐变画刷

LinearGradientBrush能从一种颜色线性渐变到另一种。

private void Form1_Paint(object sender, PaintEventArgs e)

{

    Rectangle rect = new Rectangle(20, 40, 250, 100);

    using (LinearGradientBrush br = new LinearGradientBrush(rect, Color.Red, Color.Blue, LinearGradientMode.Horizontal))

    {

        ColorBlend color_blend = new ColorBlend();

        color_blend.Colors = new Color[]{Color.Red, Color.Orange, Color.Yellow,Color.Lime, Color.Blue, Color.Indigo, Color.DarkViolet};

        color_blend.Positions = new float[] { 0 / 6f, 1 / 6f, 2 / 6f, 3 / 6f, 4 / 6f, 5 / 6f, 6 / 6f };

        br.InterpolationColors = color_blend;

        e.Graphics.FillRectangle(br, rect);

        e.Graphics.DrawRectangle(Pens.Black, rect);

    }

}

C Graphics Programming笔记(二) - Castor - 趁年轻,多折腾~~
  评论这张
 
阅读(1863)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016