zoukankan      html  css  js  c++  java
  • Java Graphics2D类的绘图方法

    Java Graphics2D类的绘图方法

    Graphics2D继承自Graphics,它扩展了Graphics的绘图功能,拥有更强大的二维图形处理能力,提供对几何形状、坐标转换、颜色管理以及文字布局等更精确的控制。

    Graphics2D定义了几种方法,用于添加或改变图形的状态属性。可以通过设定和修改状态属性,指定画笔宽度和画笔的连接方式,设定平移、旋转、缩放或修剪变换图形,以及设定填充图形的颜色和图案等。

    图形状态属性用特定的对象存储。


    常用绘图属性

    stroke属性

    我们可以调用调用如下方法来设置stroke属性:
    public abstract void setStroke(Stroke s)

    stroke属性用于控制线条的宽度、笔形样式、线段连接方式或短划线图案。

    如果我们要设置stroke属性,则应当先创建Stroke引用的对象,但由于Stroke为接口类型,所以我们要创建对象,可以创建其已知实现类BasicStroke的对象。

    BasicStroke常用的构造方法有:
    // 构造一个具有指定属性的实心的 BasicStroke
    public BasicStroke(float width, int cap, int join)

    // 构造一个具有指定线条宽度以及 cap 和 join 风格为默认值的实心 BasicStroke
    public BasicStroke(float width)

    cap是端点样式,可取值为:CAP_BUTT(无修饰),CAP_ROUND(半径等于画笔宽度一半的圆形装饰末端),CAP_SQUARE(正方形末端,默认值)。

    join是用于定义两线段交汇处的连接方式:JOIN_BEVEL(无修饰),JOIN_MITER(尖形末端,默认值),JOIN_ROUND(圆形末端)。

    clip属性

    clip属性用于实现剪裁效果。设置剪裁属性可调用如下方法确定剪裁区的Shape:
    public abstract void setClip(int x, int y, int width, int height)

    连续多个setClip()得到它们交集的剪裁区。

    paint属性

    paint属性控制填充效果,通过调用setPaint()方法设置:
    public abstract void setPaint(Paint paint)

    paint可以同时作用在边线和填充上,可以是单色,渐变和图案,任何paint都需要实现java.awt.Paint接口。因为Color类实现了java.awt.Paint接口,所有的Color对象都是Paint对象。

    GradientPaint类:
    public GradientPaint(float x1, float y1, Color color1,
    float x2, float y2, Color color2)

    这个类用颜色渐变填充一个区域,构造函数指定定比例和颜色。图形引擎会从第一个点到第二个点之间线性变化两个颜色:从(x1,y1)到(x2,y2)颜色从c1渐变到c2。我们还可以指定颜色图案是否允许重复。


    TexturePaint类:
    public TexturePaint(BufferedImage txtr, Rectangle2D anchor)

    这个类平铺一个图像来填充图形,构造函数接收一个java.awt.image.BufferedImage和一个Rectangle2D,把图像影射到矩形里,然后平铺矩形。

    我们可以先创建GradientPaint类或TexturePaint类的对象,再调用Graphics2D的setPaint()方法设置填充效果。

    Font属性

    所有的文本都使用能表现文字的样式图形渲染。当前的字体决定了字体的形状。使用继承自java.awt.Graphics的getFont()方法和setFont()方法来操纵字体。尽管设置字体相对简单的工作,Java 2D还是为文本描绘提供了丰富的选项。

    Transform属性

    transform属性用来实现常用的图形平移、缩放和斜切等变换操作。我们可以调用setTransform()来设置transform属性:
    public abstract void setTransform(AffineTransform Tx)

    该方法需要一个AffineTransform对象的参数,所以首先创建AffineTransform对象,然后调用setTransform()方法设置transform属性。最后,用具有指定属性的Graphics2D对象绘制图形。

    创建AffineTransform对象的方法有:
    // 旋转变换,旋转theta弧度
    public static AffineTransform getRotateInstance(double theta)

    // 绕旋转中心(anchorx, anchory)旋转
    public static AffineTransform getRotateInstance(double theta, double anchorx,
    double anchory)

    // 缩放变换,x和y方向分别按sx,sy比例变换
    public static AffineTransform getScaleInstance(double sx, double sy)

    // 错切变换,shx和shy指定斜拉度
    public static AffineTransform getShearInstance(double shx, double shy)

    // 平移变换,tx和ty表示x和y方向平移距离
    public static AffineTransform getTranslateInstance(double tx, double ty)

    当然,也可以先创建一个没有transform属性的AffineTransform对象,然后用以下方法指定图形平移、旋转、缩放变换属性:
    // 将图形在x轴方向平移tx像素,y轴方向平移ty像素
    public void translate(double tx, double ty)

    // 旋转theta弧度
    public void rotate(double theta)

    // 图形以点(anchorx, anchory)为轴点,旋转theta弧度
    public void rotate(double theta, double anchorx, double anchory)

    // 图形在x轴方向缩放sx倍,纵向缩放sy倍
    public void scale(double sx, double sy)

    composit属性

    composit属性设置图形重叠区域的效果。可通过调用setComposite()方法设置该属性:
    public abstract void setComposite(Composite comp)

    例如先用方法AlphaComposite.getInstance(int rule, float alpha)得到AlphaComposite对象,再通过setComposite()方法设置混合效果。AlphaComposite在图形和图像中实现混合和透明效果,Alpha值的范围为0.0f(完全透明)-1.0f(完全不透明)。

  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/chendezhen/p/15774833.html
Copyright © 2011-2022 走看看