Maison > Java > javaDidacticiel > le corps du texte

Tutoriel d'utilisation de base de la classe Graphics2D en Java

高洛峰
Libérer: 2017-01-17 16:13:56
original
1293 Les gens l'ont consulté

Sur la base de la classe Graphics qui fournit diverses figures géométriques de base, le langage Java étend la classe Graphics pour fournir une classe Graphics2D, qui possède des capacités de traitement graphique bidimensionnel plus puissantes et fournit la conversion de coordonnées, la gestion des couleurs et la mise en page du texte. . En attendant un contrôle plus précis.
Propriétés du dessin

Graphics2D définit plusieurs méthodes pour ajouter ou modifier les propriétés d'état des graphiques. Vous pouvez spécifier la largeur du pinceau et la méthode de connexion du pinceau en définissant et en modifiant les propriétés d'état ; en définissant les graphiques de transformation de translation, de rotation, de mise à l'échelle ou de découpage et en définissant la couleur et le motif des graphiques remplis, etc. Les propriétés de l'état graphique sont stockées à l'aide d'objets spécifiques.

1. Attribut de trait
L'attribut de trait contrôle la largeur de la ligne, le style du stylo, la façon dont les segments de ligne sont connectés ou le motif des tirets. Pour définir cette propriété, vous devez d'abord créer un objet BasicStroke, puis appeler la méthode setStroke() pour la définir. Les méthodes pour créer un objet BasicStroke sont :
BasicStroke(float w) : Spécifiez la largeur de ligne w.
BasicStroke(float w, int cap, int join) :
cap est le point final : CAP_BUTT (non modifié), CAP_ROUND (extrémité semi-circulaire), CAP_SQUARE (extrémité carrée, valeur par défaut).
Join définit la méthode de connexion à l'intersection de deux segments de droite : JOIN_BEVEL (aucune modification), JOIN_MTTER (extrémité pointue, valeur par défaut), JOIN_ROUND (extrémité arrondie).

2. Attribut paint
L'attribut paint contrôle l'effet de remplissage. Appelez d’abord la méthode suivante pour déterminer l’effet de remplissage et utilisez la méthode setPaint() pour le définir.
GradientPaint(float x1, float y1, Color c1, float x2, flaot y2, Color c2) : De (x1, y1) à (x2, y2), le dégradé de couleurs de c1 à c2. Parmi eux : les paramètres c1 et c2 déterminent la couleur du dégradé de la couleur c1 à la couleur c2. Les paramètres x1, y1, x2, y2 déterminent la force du dégradé, c'est-à-dire qu'à partir du point (x1, y1) jusqu'au point (x2, y2), la couleur passe de c1 à c2.
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean cyclic) : Si vous souhaitez que le dégradé soit la couleur du point final et du point de départ, cyclique doit être défini sur vrai.

3. Attribut de transformation
L'attribut de transformation est utilisé pour implémenter des opérations de transformation courantes telles que la traduction graphique, la mise à l'échelle et le biseautage. Créez d’abord un objet AffineTransform, puis appelez la méthode setTransform() pour définir l’attribut transform. Enfin, le graphique est dessiné à l'aide d'un objet Graphics2D avec des propriétés spécifiées. Les méthodes de création d'objets AffineTransform sont :

getRotateinstrance(double theta) : faites pivoter les theta radians.

getRotateInstance(double theta,dioble x,double y) : Rotation autour du centre de rotation (x, y).

getScaleInstance(double sx,double sy) : Les directions x et y sont transformées en fonction de la proportion de sx et sy respectivement.

getTranslateInstance(double tx,double ty) : transformation de traduction.

getShearInstance(double shx,double shy) : transformation oblique, shx et shy précisent le degré oblique.

Vous pouvez également créer d'abord un objet AffineTransform sans attribut de transformation, puis utiliser les méthodes suivantes pour spécifier les attributs de transformation graphique, de rotation et de mise à l'échelle.

transelate(double dx,double dy) : Traduisez le graphique par pixels dx dans la direction de l'axe x.

scale(double sx,double sy) : Le graphique est mis à l'échelle sx fois dans la direction de l'axe x et sy fois verticalement.

rotate(double arc,double x, double y) : le graphique utilise le point (x, y) comme point d'axe et fait pivoter les radians de l'arc.

Par exemple, créez un objet AffineTransform :

AffineTransform trans = new AffineTransform();
Copier après la connexion

Spécifiez l'attribut de transformation de rotation autour du point pour l'objet AffineTransform :

Trans.rotate(50.0*3.1415927/180.0,90,80);
Copier après la connexion

Puis définissez l'objet g2d de Graphics2D avec la rotation ci-dessus Le "pinceau" de la fonction de transformation :

Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
Copier après la connexion

Enfin, appelez la méthode draw() de l'objet Graphics2D avec la fonction de transformation en utilisant l'objet graphique comme paramètre. Par exemple, en supposant qu'il existe une courbe d'objet courbe quadratique, le code suivant implémente le dessin de cette courbe quadratique en utilisant l'objet g2d avec la fonction de rotation ci-dessus :

g2d.draw(curve)
Copier après la connexion

4. 🎜 > L'attribut clip est utilisé pour obtenir un effet d'écrêtage. Pour définir l'attribut de découpage, vous pouvez appeler la méthode setClip() pour déterminer la forme de la zone de découpage. Plusieurs opérations setClip() sont effectuées consécutivement pour obtenir la zone de découpage à leur intersection.

5. Attribut de composition

L'attribut de composition définit l'effet de la zone de chevauchement des graphiques. Utilisez d'abord la méthode AlphaComposite.getInstance(int Rule, float alpha) pour obtenir l'objet AlphaComposite, puis définissez l'effet de mélange via la méthode setComposite(). Les valeurs alpha vont de 0,0f (entièrement transparent) à 0,1f (entièrement opaque).
Méthodes de dessin de la classe Graphics2D

La classe Graphics2D conserve toujours les méthodes de dessin de la classe Graphics, tout en ajoutant de nombreuses nouvelles méthodes. La nouvelle méthode dessine des formes géométriques (segments de ligne, cercles, etc.) comme un objet. Une série de classes déclarées dans le package java.awt.geom sont utilisées pour créer divers objets graphiques corporels. Inclut principalement :

Classe de segment de ligne Line2D, classe de rectangle arrondi RoundRectangle2D, classe d'ellipse Ellipse2D, classe d'arc Arc2D, classe de courbe quadratique QuadCurve2D, classe de courbe cubique CubicCurve2D.

Vous devez utiliser la nouvelle méthode de la classe Graphics2D pour dessiner un graphique. Tout d'abord, dans la méthode de redessinage paintComponent() ou paint(), forcez l'objet paramètre g dans un objet Graphics2D ; puis utilisez la méthode statique Double() fournie par la classe graphique ci-dessus pour créer l'objet du graphique ; l'objet graphique en paramètre Appelez la méthode draw() de l'objet Graphics2D pour dessiner ce graphique. Par exemple, le code suivant utilise la nouvelle méthode de Graphics2D pour dessiner des segments de ligne et des rectangles arrondis :

Graphics2D g2d = (Graphics2D)g;//将对象g类型从Graphics转换成Graphics2D
Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0);
g2d.draw(line);
RoundRectangle2D rRect = new RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0);
g2d.draw(rRect);
Copier après la connexion
Vous pouvez également d'abord utiliser l'objet Shape fourni par le package java.awt.geom et le créer avec Coordonnées flottantes simple précision ou coordonnées doubles double précision, puis dessinez-le à l'aide de la méthode draw(). Par exemple, le code suivant crée d'abord un objet arc, puis dessine l'arc :


Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN);
g2d.draw(arc)//绘制前面创建的图形对象arc
Copier après la connexion
Classe de géométrie de Graphics2D

Segment de ligne

Line2D line = new Line2D.Double(2,3,200,300);//声明并创建线段对象
//起点是(2,3),终点是(200,300)
Copier après la connexion

矩形

Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//声明并创建矩形对象,矩形的左上角是(20,30),宽是300,高是40
Copier après la connexion

圆角矩形

RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15);
//左上角是(20,30),宽是130,高是100,圆角的长轴是18,短轴是15。
Copier après la connexion

椭圆

Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);
//左上角 (20,30),宽是100,高是50
Copier après la connexion

圆弧

Arc2D arc1 = new Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN);
//外接矩形的左上角(10,30),宽85,高60,起始角是5度,终止角是90度
Arc2D arc2 = new Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD);
Arc2D arc3 = new Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
Copier après la connexion

参数Arc2D.OPEN、Arc2D.CHORD、Arc2D.PIE分别表示圆弧是开弧、弓弧和饼弧。
二次曲线
二次曲线用二阶多项式表示:

y(x)=ax2+bx+c
Copier après la connexion

一条二次曲线需要三个点确定:始点、控制点和终点。

QuadCurve2D curve1 = new QuadCurver2D.Double(20,10,90,65,55,115);
QuadCurve2D curve2 = new QuadCurver2D.Double(20,10,15,63,55,115);
QuadCurve2D curve3 = new QuadCurver2D.Double(20,10,54,64,55,115);
Copier après la connexion

方法Double()中的6个参数分别是二次曲线的始点、控制点和终点。以上3条二次曲线的开始点和终点分别相同。
三次曲线
三次曲线用三阶多项式表示:

y(x)=ax3+bx2+cx+d
Copier après la connexion

一条三次曲线需要四个点确定:始点、两个控制点和终点。

CubicCurve2D curve1 = new CubicCurve2D.Double(12,30,50,75,15,15,115,93);
CubicCurve2D curve2 = new CubicCurve2D.Double(12,30,15,70,20,25,35,94);
CubicCurve2D curve3 = new CubicCurve2D.Double(12,30,50,75,20,95,95,95);
Copier après la connexion

方法Double()中的8个参数分别是三次曲线的始点、两个控制点和终点。

一般的方程曲线的绘制过程用一个循环控制。通过循环产生自变量的值,按照方程计算出函数值,再作必要的坐标转换:原点定位的平移变换,图像缩小或放大的缩放变换,得到曲线的图像点,并绘制这个点。以绘制以下曲线方程为例:

Y=sin(x)+cos(x),x
Copier après la connexion

绘制的部分代码可以写成如下:

double x0,y0,x1,y1,x2,y2,scale;
x0=100;y0=80;
scale =20.0;
for(x1=-3.1415926d;x1<=2*3.1415926d;x1+=0.01d){
  y1=Math.sin(x1)+Math.cos(x1);
  x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2)是图像点
  g.fillOval((int)x2,(int)y2,1,1);//画一个圆点作为图像点
}
Copier après la connexion

更多Java中的Graphics2D类基本使用教程相关文章请关注PHP中文网!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal