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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

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

网易考拉推荐

C# GDI+编程(一)  

2011-05-05 17:20:54|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

GDI+基础知识

首先你要有点基本的几何概念。例如大家常说的点动成线,线动成面,面动成体。两点确定一条直线,不在同一直线上的三点确定一个圆(或者平面),诸如此类。然后你要理解的是,对应于几何概念中点,就是屏幕上的一个像素,因此,这种点和纯粹几何中的点还是有区别的。最后一个就是坐标了,和解析几何不同,其坐标系统如下:

C GDI+编程(一) - Castor - 趁年轻,多折腾~~

正方向通常是从X轴旋转90°到Y轴那个方向,由于坐标位置的关系,你可以发现旋转的正方向是顺时针的,而不是像经典解析几何中的逆时针。

关于点。点是图形中最基本的单元,没有之一。C#中表示点的结构体是PointPointF,前者接受的参数是整型,而后者则为float的浮点型(注意不是double类型,了解这一点很重要)。除此之外,两者并没有太大的区别,都是表示在二维平面中定义点的X Y 坐标的有序对。另外,和现实世界中类似的,绘图需要有画笔,这在C#中被抽象为Pen类,它是用于绘制指定宽度和样式的直线和曲线。使用 DashStyle 属性绘制几种虚线。可以使用各种填充样式(包括纯色和纹理)来填充 Pen 绘制的对象,填充模式取决于画笔或用作填充对象的纹理。该类是一个密封类,这意味着你无法继承该类。

关于颜色。颜色是描述图形的基本元素之一,GDI+中使用两种模式表示色彩,一个是RGB,另一个是CMYK

RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216 )种颜色。在 RGB 模式下,每种 RGB 成分都可使用从 0(黑色)到 255(白色)的值。 例如,亮红色使用 R 255G 0 B 0 当所有三种成分值相等时,产生灰色阴影。 当所有成分的值均为 255 时,结果是纯白色;当该值为 0 时,结果是纯黑色。

CMYK也称作印刷色彩模式,是一种依靠反光的色彩模式,和RGB类似,CMY3种印刷油墨名称的首字母:青色Cyan、品红色Magenta、黄色Yellow。而K取的是black最后一个字母,之所以不取首字母,是为了避免与蓝色(Blue)混淆。从理论上来说,只需要CMY三种油墨就足够了,它们三个加在一起就应该得到黑色。但是由于目前制造工艺还不能造出高纯度的油墨,CMY相加的结果实际是一种暗红色。

GDI+中承担颜色的类是Color结构体,Color结构体只有一个默认的构造函数,不过它有许多有用的静态方法实现了颜色的构造和转换见下表:

静态方法

说明

FromArgb(Int32) 

从一个 32 ARGB 值创建 Color 结构

FromArgb(Int32, Color)

从指定的 Color 结构创建 Color 结构,但要使用新指定的 alpha 值。 尽管此方法允许为 alpha 值传递 32 位值,但该值仅限于 8

FromArgb(Int32, Int32, Int32)

从指定的8位颜色值(红色、绿色和蓝色)创建 Color 结构。 alpha 值默认为 255(完全不透明)。

FromArgb(Int32, Int32, Int32, Int32)

从四个 ARGB 分量(alpha、红色、绿色和蓝色)值创建 Color 结构。

FromKnownColor

基于指定的预定义颜色创建 Color 结构

FromName

基于预定义颜色的指定名称创建 Color 结构

另外,对于一个Color结构的实例,比较有用的方法如下:

实例方法

说明

GetBrightness

获取此Color结构的“色调-饱和度-亮度”(HSB)的亮度值。

GetHue

获取此Color结构的“色调-饱和度-亮度”(HSB)的色调值,以度为单位。

GetSaturation

获取此Color结构的“色调-饱和度-亮度”(HSB)的饱和度值。

ToArgb

获取此Color结构的32ARGB值。

ToKnownColor

获取此Color结构的KnownColor值。

例如创建一个红色的颜色对象可以是:

Color c = Color.FromArgb(255, 0, 0);

当然,Color中也有多达140种预定义的颜色,这些颜色基本上可以完成常见的任务,开头的几个颜色如下表:

属性

说明

AliceBlue

ARGB值为#FFF0F8FF的系统定义的颜色。

AntiqueWhite

ARGB值为#FFFAEBD7的系统定义的颜色。

Aqua

ARGB值为#FF00FFFF的系统定义的颜色。

Aquamarine

ARGB值为#FF7FFFD4的系统定义的颜色。

Azure

ARGB值为#FFF0FFFF的系统定义的颜色。

Beige

ARGB值为#FFF5F5DC的系统定义的颜色。

Bisque

ARGB值为#FFFFE4C4的系统定义的颜色。

Black

ARGB值为#FF000000的系统定义的颜色。

BlanchedAlmond

ARGB值为#FFFFEBCD的系统定义的颜色。

Blue

ARGB值为#FF0000FF的系统定义的颜色。

完整的颜色可以查看MSDN

关于颜色,还有一个很有趣的属性是透明度的问题(Alpha)。事实上,Color对象的信息由一个32位的书籍表示,每8位代表一个信息,分别是透明度和红色、绿色和蓝色。透明度就是相对于悲剧的颜色的混合程度,取值为0~255.0表示完全透明(完全是背景色),而255表示完全不透明,就是前景色。透明度的计算方法如下:蛇前景色和背景色的颜色中某个分量,例如蓝色,分别为B1B2,如果透明度设置为Alpha值,则相互交叠的区域中颜色的蓝色分量值为:

B=B1*Alpha/255+B2*(255-Alpha)/255

对于其他颜色分量也有类似的计算公式。当然,计算的结果必须取整。下图中是Alpha分别为100200的效果:

C GDI+编程(一) - Castor - 趁年轻,多折腾~~

       显然右图显得更加不透明。关于透明度的问题,还有在后面做详细的介绍。

  评论这张
 
阅读(3044)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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