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(完全不透明)。

  • 相关阅读:
    获取字符串最长不重复子串
    斐波那契数列&&上台阶
    mysql 索引
    Python unittest框架实现appium登录
    解决RedisDesktopManager连接不上redis问题
    Nginx配置---启用gzip压缩
    Nginx配置---同一端口下部署不同项目
    Nginx配置---解决History路由报错问题
    个人网站搭建基本流程
    Create-React-App项目中CSS Modules的使用
  • 原文地址:https://www.cnblogs.com/chendezhen/p/15774833.html
Copyright © 2011-2022 走看看