首页 > 编程知识 正文

ug转2d几种方法,greendao使用详解

时间:2023-05-05 06:16:28 阅读:24195 作者:2840

Java 2d-howthegraphics2dclassrenders如上所述,可以对graphics2d类进行一些设置。 事实上,渲染引擎在绘制Graphics2D图形之前会检查七个主要属性。

绘画作品

Stroke

字体

传输

裁剪空间

渲染隐藏

配置规则

让我逐一说明:

绘画作品

新的paint现在可以同时作用于边线和填充。 Graphics2D类可以使用setPaint (和getPaint )方法调整paint属性。 G2.setpaint ) Java.awt.paintpaint ); Paint paint=g2.getPaint (; paint可以是单色、渐变或图案。 任何paint都需要实现java.awt.Paint接口。

Java 2D类库有三个类。 你应该很清楚。

java.awt.Color:

Java 2D使用相同的常数。 所有Color对象都是Paint对象,因为Color类实现了java.awt.Paint接口。

java.awt.GradientPaint:

这个类用颜色渐变填充区域。 构造函数创建比例和颜色。 图形引擎在第一个点到第二个点之间线性地改变两种颜色。 也可以指定是否允许颜色图案重复。

java.awt.TexturePaint:

这个类排列图像以填充图形。 构造函数接收java.awt.image.BufferedImage和Rectangle2D,将图像映射为矩形,然后排列矩形。

图3显示了java.awt.GradientPaint和java.awt.TexturePaint的示例。

图3 .梯度绘制和纹理绘制

创建用于存储图像的缓冲图像是一种比较直接的方法。 在BufferedImage构造函数中指定长度、宽度、高度和类型为BufferedImage.TYPE_INT_RGB,然后调用createGraphics ()方法检索Graphics2D

使用照片需要更多的步骤。 首先,从一个图像文件导入Image对象,使媒体跟踪器完全导入图像,然后创建宽的空缓冲图像对象,如Image对象。 使用createGraphics ()方法获取Graphics2D对象,最后将Image对象加载到bufferedImage中。

Stroke

线条决定图形和文字的轮廓。 setStroke ) )方法定义笔画: G2.set stroke (Java.awt.stroke stroke ); Java.awt.stroke stroke=G2.get stroke (; 在Java 2D出现之前,java.awt.Graphics的绘制方法生成了一个像素宽的实线边。 Java 2D API提供了更灵活的笔划选择。 边缘可以是粗细不同的实线,也可以是等宽虚线。

setStroke (方法的参数必须实现java.awt.Stroke接口。 目前,java.awt.BasicStroke类是唯一的实现类。 以下是BasicStroke的构造函数:

基本stroke (: )

此结构创建一条宽1单位的线。 端点样式为缺省CAP_SQUARE,缺省接头样式为缺省JOIN_MITER。

基本条纹(浮动宽度) :

指定线宽,端点样式使用缺省CAP_SQUARE,缺省接头样式使用缺省JOIN_MITER。

基本条纹(浮动窗口,int capStyle,int joinStyle ) :

指定线宽、端点样式和接头样式。

基本条纹(floatpenwidth,int capStyle,int joinStyle,float miterLimit ) :

基本相同,但可以设置拼接连接的延长度,默认值为10。

基本条纹(floatpenwidth,int capStyle,int joinStyle,float miterLimit,

float[] dashPattern,floatdashoffset]:

该结构通过表示[透明、不透明]排列,可以制作虚线的轮廓。 offset是虚线的开始位置,通常为0,0。

如这五个构造函数所示,可以在BasicStroke类中设置端点样式。 类型如下:

Java.awt.basic stroke.cap _ butt :端点将直接断开连接。

以Java.awt.basic stroke.cap _ round :线宽为直径的圆形端点。

Java.awt.basic stroke.cap _ square :以半宽为单位延伸的方形端点。

基本stroke也可以指定端点

的连接样式,斜角,拼接和圆角:
java.awt.BasicStroke.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,                   // 拼接限制                                 new float[] {10.0,10.0} // 点线图案                                 5.0);                    // 定位 我们再看一下最后三个属性:
拼接限制可以避免当两条线以JOIN_MITER连接且角度很小的时候,延伸的很夸张。点线图案是一个浮点数组,第一个是实线的长度,第二个是间断的长度。不断重复描绘实线和间断实现点线效果。最后的定位设置了位移,即线的起始点。

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

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 aroundPointX, 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); 同样,你也可以直接操纵数字矩阵来实现复杂变形。这要比使用基本的变换,旋转,缩放,倾斜变形等复杂的多。更多关于线性代数的知识超出了本文的讨论范围,在Java 2D API里会对此有说明。一旦你熟悉了这些概念,它们可以有效地帮你实现变形。

java.awt.AffineTransform类提供了大量的变形控制,可以唯一可实现和上文提到的矩阵能实现的复杂变形的类。通过AffineTransform类的静态方法可以得到一个AffineTransform对象,如AffineTransform.getRotateInstance(....),或AffineTransform.getShearInstance(...),或者不带参的构造函数创建单位变形。    AffineTransform newTransformation = new AffineTransform(); 单位变形包含一个单位矩阵,该矩阵保留原始矢量且不可被操作变形。可以用下面的方法修改变形行为:      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 translateX, 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 concatenate(AffineTransform transform);     public void preConcatenate(AffineTransform transform);
Clipping Space
如果渲染操作在当前的剪辑空间外,则任何像素不会被改变。当前默认的剪辑空间是null,即修改整个图像表层。可以用setClip()方法设置当前的剪辑空间,该方法继承自java.awt.Graphics:      g2.setClip(Shape clip);     g2.setClip(int x, int y, int width, int height);     Shape clip = g2.getClip(); 此外,Graphics2D类提供了chip()方法,可以把传入的图形和当前剪辑空间的交集设置为新的剪辑空间。      g2.clip(Shape s); 图形既可能是矩形之类的简单图形,也可能是字母数字之类的复杂图形。通过剪辑,可以选择或排出会受影响的像素。

Rendering Hints
Rendering hints是Graphics2D对象描绘基本类型时使用的各种描绘方法。如先前使用的抗锯齿hint。这些hints被封装在java.awt.RenderingHints类中。由于使用Java 2D API会比旧的AWT涉及更多的计算,设计师默认禁止了一部分特性以提高性能。两个最常用的设置是抗锯齿(混合锯齿柔滑锯齿线)和高质量渲染,如下:       RenderingHints renderHints =        new RenderingHints(RenderingHints.KEY_ANTIALIASING,                           RenderingHints.VALUE_ANTIALIAS_ON);      renderHints.put(RenderingHints.KEY_RENDERING,                      RenderingHints.VALUE_RENDER_QUALITY);      ...      public void paintComponent(Graphics g) {        super.paintComponent(g);        Graphics2D g2d = (Graphics2D)g;        g2d.setRenderingHints(renderHints);        ...      } 其他渲染hints适用在不同的环境下。如缩放图片时,为KEY_INTERPOLATION使用VALUE_INTERPOLATION_BILINEAR。请查阅本类的Javadoc,详细了解各个选项所适用的环境。

Compositing Rule
组合规则决定图形之间颜色的相互影响。例如图片或图形的不透明度属于整个分类。以下方法可以得到组合规则:     g2.setComposite(java.awt.Composite composite);     Composite composite = g2.getComposite(); Java 2D允许分配透明(alpha)值,以便底层的图形可以显示出来。通常我们会创建一个java.awt.AlphaComposite对象,然后传入setComposite()方法的实现。

通常,用AlphaComposite.getInstance()方法,配合一定的混合规则和透明度值,创建AlphaComposite对象。Java 2D内建了一些符合 Porter-Duff 组合规则的混合规则。但在处理不透明时,通常会使用AlphaComposite.SRC_OVER。透明值由透明到不透明是在0.0和1.0之间。下面是完整的列表:      AlphaComposite.CLEAR   - 交集部分的颜色和透明被清除。     AlphaComposite.DST   - 目标未修改。     AlphaComposite.DST_ATOP   - 目标和源重叠的部分组合在源上。     AlphaComposite.DST_IN   - 显示目标和源重叠的部分。     AlphaComposite.DST_OUT   -显示目标没有和源重叠的部分。     AlphaComposite.DST_OVER   - 目标覆盖在源之上。     AlphaComposite.SRC   - 源复制给目标。     AlphaComposite.SRC_ATOP   - 源和目标重叠的部分组合在目标上。     AlphaComposite.SRC_IN   - 显示源和目标重叠的部分。     AlphaComposite.SRC_OUT   - 显示源没有和目标重叠的部分。     AlphaComposite.SRC_OVER   - 源覆盖在目标之上。 图 5 是几个常用选项的图形效果。

图 5. Alpha Composite的常用选项。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。