ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:53.25KB ,
资源ID:3062436      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3062436.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Graphics2D使用详解.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Graphics2D使用详解.docx

1、Graphics2D使用详解Graphics2D 使用详解 【转】2007-08-24 11:30Java 2D - How the Graphics2D Class Renders正如我们在前面提到的,我们可以对Graphics2D类进行多项设置。实际上,渲染引擎在绘制Graphics2D图形前会查看7个主要的属性:PaintStrokeFontTransformationClipping spaceRendering hintsCompositing rule让我们逐一讲解:Paint新的paint可以同时作用在边线和填充上了。Graphics2D类可以用setPaint()和getPai

2、nt()方法配制paint属性: g2.setPaint(java.awt.Paint paint); Paint paint = g2.getPaint();paint可以是单色,渐变和图案。任何paint都需要实现java.awt.Paint接口。Java 2D类库中有三个类你应该感到熟悉:java.awt.Color: Java 2D使用同样的常量。因为Color类实现了java.awt.Paint接口,所有的Color对象都是Paint对象。java.awt.GradientPaint:这个类用颜色渐变填充一个区域。构造函数制定比例和颜色。图形引擎会从第一个点到第二个点之间线性变化两个

3、颜色。我们还可以指定颜色图案是否允许重复。java.awt.TexturePaint: 这个类平铺一个图像来填充图形。构造函数接收一个java.awt.image.BufferedImage和一个Rectangle2D,把图像影射到矩形里,然后平铺矩形。图3 显示java.awt.GradientPaint和java.awt.TexturePaint的实例。图 3. GradientPaint 和 TexturePaint建立一个BufferedImage来保存图像相对是更直接的方法。在BufferedImage的构造函数里制定长,宽,高,类型为BufferedImage.TYPE_INT_R

4、GB,然后调用createGraphics()方法得到一个Graphics2D。如果要用图片的话就需要更多的步骤。首先,从一个图片文件里读入Image对象,用MediaTracker保证图片完全读入,然后建立和Image对象等宽高的空BufferedImage对象。通过createGraphics()方法得到Graphics2D对象,最后把Image对象加载到bufferedImage里。Stroke描边决定着图形或文字的轮廓。通过setStroke()方法定义描边:: g2.setStroke(java.awt.Stroke stroke); java.awt.Stroke stroke =

5、 g2.getStroke();在Java 2D出现以前,java.awt.Graphics的描绘方法产生一个1像素宽的实线边。Java 2D API给你更灵活的描边选择。边缘即可以是粗细不等的实线,也可以是等宽点线。setStroke()方法的参数必须实现java.awt.Stroke接口。现在java.awt.BasicStroke类是唯一实现的类。下面是BasicStroke的构造函数:BasicStroke():这个构造建立一个1单位宽的描边。端点样式是默认的CAP_SQUARE,默认接头样式是默认的 JOIN_MITER。BasicStroke(float penWidth): 指定

6、线宽,端点样式使用默认的CAP_SQUARE,默认接头样式使用默认的 JOIN_MITER。BasicStroke(float penWidth, int capStyle, int joinStyle): 指定线宽,端点样式和接头样式。BasicStroke(float penWidth, int capStyle, int joinStyle, float miterLimit):基本同上,但可以设置拼接连接的延长度,默认是10。BasicStroke(float penWidth, int capStyle, int joinStyle, float miterLimit,float d

7、ashPattern, float dashOffset):这个构造可以通过一个表明透明,不透明的数组,建立点线轮廓。offset是点线的起始位置,一般是0,0。正如这5个构造函数所示,BasicStroke类允许设定端点样式。型如下:java.awt.BasicStroke.CAP_BUTT: 端点直接切断。java.awt.BasicStroke.CAP_ROUND: 以线宽为直径的圆形端点。java.awt.BasicStroke.CAP_SQUARE: 半线宽单位延伸的方块端点。BasicStroke 还可以指定端点的连接样式,斜角,拼接和圆角:java.awt.BasicStroke

8、.JOIN_BEVEL: 用直线连接两条线的外角。java.awt.BasicStroke.JOIN_MITER: 延伸外角直至两线相接。java.awt.BasicStroke.JOIN_ROUND: 半线宽单位的圆形封顶。图 4 是以上各个选项的效果。图 4. BasicStroke 的 Cap 和 Join 选项。下面的例子用BasicStroke生成点线: Stroke stroke = new BasicStroke(5.0f , / 线宽 BasicStroke.CAP_ROUND, / 端点 BasicStroke.JOIN_MITER, / 接头 15.0f, / 拼接限制 n

9、ew float 10.0,10.0 / 点线图案 5.0); / 定位 我们再看一下最后三个属性:拼接限制可以避免当两条线以JOIN_MITER连接且角度很小的时候,延伸的很夸张。点线图案是一个浮点数组,第一个是实线的长度,第二个是间断的长度。不断重复描绘实线和间断实现点线效果。最后的定位设置了位移,即线的起始点。Font所有的文本都使用能表现文字的样式图形渲染。当前的字体决定了字体的形状。使用继承自java.awt.Graphics的getFont()方法和setFont()方法来操纵字体。尽管设置字体相对简单的工作,Java 2D还是为文本描绘提供了丰富的选线。本文的后续版本会深度讨论这

10、个问题。Transformation图形在渲染前可能会进行一步或多步的变形。简单而言就是图形可能被移动,旋转或拉伸。可以通过setTransform()方法设置当前的变形: g2.setTransform(java.awt.geom.AffineTransform transform); AffineTransform transform = g2.getTransform();Graphics2D类提供许多方便的方法帮助实现变形。 public void rotate(double theta); public void rotate(double theta, double aroundP

11、ointX, double aroundPointY); public void scale(double scaleX, double scaleY); public void shear(double shearX, double shearY); public void translate(double translateX, double translateY); public void transform(AffineTransform transform);同样,你也可以直接操纵数字矩阵来实现复杂变形。这要比使用基本的变换,旋转,缩放,倾斜变形等复杂的多。更多关于线性代数的知识超出

12、了本文的讨论范围,在Java 2D API里会对此有说明。一旦你熟悉了这些概念,它们可以有效地帮你实现变形。java.awt.AffineTransform类提供了大量的变形控制,可以唯一可实现和上文提到的矩阵能实现的复杂变形的类。通过AffineTransform类的静态方法可以得到一个AffineTransform对象,如AffineTransform.getRotateInstance(.),或AffineTransform.getShearInstance(.),或者不带参的构造函数创建单位变形。 AffineTransform newTransformation = new Affi

13、neTransform();单位变形包含一个单位矩阵,该矩阵保留原始矢量且不可被操作变形。可以用下面的方法修改变形行为: public void rotate(double theta); public void rotate(double theta, double aroundPointX, double aroundPointY); public void scale(double scaleX, double scaleY); public void shear(double shearX, double shearY); public void translate(double tr

14、anslateX, double translateY);此外,用下面的方法可以重值单位变形。setToIdentity()方法是个例外,它执行了一个简单变形。 public void setToIdentity(); public void setToRotation(double theta); public void setToRotation(double theta, double aroundPointX, double aroundPointY); public void setToScale(double scaleX, double scaleY); public void setToShear(double shearX, double shearY); public void setToTranslation(double translateX, double translateY);你还可以连接或预连接其他AffineTransform类。这样不仅仅是精确控制变形顺序,而是创建了变形序列(例如变换-旋转-变换-缩放.)。使用下面的方法连接或预连接: public void concaten

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1