一些关于GDI+的文字——图形容器

来源:百度文库 编辑:神马文学网 时间:2024/04/28 06:01:08
标  题: 一些关于GDI+的文字——图形容器
发信站: 浙江大学海纳百川站 (Tue Oct 26 11:55:40 2004), 转信
图形状态(剪辑区域、变形和质量设置)存储在 Graphics 对象中。GDI+ 允许您通过
使用容器来临时替换或增加 Graphics 对象中状态的组成部分。您可以通过调用 Graph
ics 对象的 BeginContainer 方法来启动容器,通过调用 EndContainer 方法来结束容
器。在 BeginContainer 和 EndContainer 之间,您对 Graphics 对象做出的任何状态
更改都属于容器,且不改写 Graphics 对象的现有状态。
下面的示例在 Graphics 对象中创建容器。Graphics 对象的全局变形是向右平移 200
个单位,而容器的全局变形是向下平移 100 个单位。
myGraphics.TranslateTransform(200, 0);
myGraphicsContainer = myGraphics.BeginContainer();
myGraphics.TranslateTransform(0, 100);
myGraphics.DrawRectangle(myPen, 0, 0, 50, 50);
myGraphics.EndContainer(myGraphicsContainer);
myGraphics.DrawRectangle(myPen, 0, 0, 50, 50);
请注意,在前面的示例中,在调用 BeginContainer 和 EndContainer 之间执行语句 m
yGraphics.DrawRectangle(0, 0, 50, 50) 与在调用 EndContainer 之后执行同一语句
,会产生不同的矩形。只有水平变形应用于在容器外做出的 DrawRectangle 调用。两种
变形(横向平移 200 个单位及纵向平移 100 个单位)都应用于在容器内做出的 DrawR
ectangle 调用。
容器可以嵌套在另一容器中。下面的示例在 Graphics 对象中创建容器,并在第一个容
器中创建另一容器。Graphics 对象的全局变换是在 x 方向平移 100 个单位,在 y 方
向平移 80 个单位。第一个容器的全局变形是旋转 30 度。第二个容器的全局变形是在
x 方向缩放 2 倍。对 DrawEllipse 方法的调用是在第二个容器内做出的。
myGraphics.TranslateTransform(100, 80, MatrixOrder.Append);
container1 = myGraphics.BeginContainer();
myGraphics.RotateTransform(30, MatrixOrder.Append);
container2 = myGraphics.BeginContainer();
myGraphics.ScaleTransform(2, 1);
myGraphics.DrawEllipse(myPen, -30, -20, 60, 40);
myGraphics.EndContainer(container2);
myGraphics.EndContainer(container1);
请注意,所有三种变形都应用于在第二个容器内做出的 DrawEllipse 调用。另外请注意
变形的顺序:先缩放,再旋转,然后平移。最先应用最里面的变形,最后应用最外面的
变形。
Graphics 对象的任何属性均可在容器内(对 BeginContainer 和 EndContainer 的调用
之间)设置。例如,可在容器内设置剪辑区域。在容器内完成的任何绘图都将受制于该
容器的剪辑区域,并将受制于任何外部容器的剪辑区域和 Graphics 对象自身的剪辑区
域。
迄今为止所讨论的属性(全局变形和剪辑区域)由嵌套的容器合并。嵌套的容器可临时
替换其他属性。例如,如果在容器内将 SmoothingMode 属性设为 SmoothingMode.Anti
Alias,那么在该容器内调用的任何绘图方法就都将使用AntiAlias 平滑模式,但在 En
dContainer 之后调用的绘图方法将使用在调用 BeginContainer之前就位的平滑模式。
--
■■■■■■■■■■■■■■■■■■■■■■■■
这个世界只有10种人,懂二进制的和不懂二进制的
■■■■■■■■■■■■■■■■■■■■■■■■
jackyang@cs.zju since 2001
※ 来源:·浙江大学海纳百川站 bbs.zju.edu.cn·[FROM: jackyang]