Heim > Java > javaLernprogramm > Hauptteil

Grundlegendes Tutorial zur Verwendung der Graphics2D-Klasse in Java

高洛峰
Freigeben: 2017-01-17 16:13:56
Original
1254 Leute haben es durchsucht

Auf der Grundlage der Graphics-Klasse, die verschiedene grundlegende geometrische Figuren bereitstellt, erweitert die Java-Sprache die Graphics-Klasse, um eine Graphics2D-Klasse bereitzustellen, die über leistungsfähigere zweidimensionale Grafikverarbeitungsfunktionen verfügt und Koordinatenkonvertierung, Farbmanagement und Textlayout bietet . Warten auf eine genauere Kontrolle.
Zeichnungseigenschaften

Graphics2D definiert mehrere Methoden zum Hinzufügen oder Ändern der Statuseigenschaften von Grafiken. Sie können die Pinselbreite und die Verbindungsmethode des Pinsels festlegen, indem Sie die Zustandseigenschaften festlegen und die Transformationsgrafiken für Verschiebung, Drehung, Skalierung oder Trimmen sowie die Farbe und das Muster der gefüllten Grafiken festlegen. Grafikstatuseigenschaften werden mit bestimmten Objekten gespeichert.

1. Strichattribut
Das Strichattribut steuert die Breite der Linie, den Stiftstil, die Art und Weise, wie die Liniensegmente verbunden sind, oder das Strichmuster. Um diese Eigenschaft festzulegen, müssen Sie zunächst ein BasicStroke-Objekt erstellen und dann die Methode setStroke() aufrufen, um es festzulegen. Die Methoden zum Erstellen eines BasicStroke-Objekts sind:
BasicStroke(float w): Geben Sie die Linienbreite w an.
BasicStroke(float w, int cap, int join):
cap ist der Endpunkt: CAP_BUTT (unverändert), CAP_ROUND (halbkreisförmiges Ende), CAP_SQUARE (quadratisches Ende, Standardwert).
Join definiert die Verbindungsmethode am Schnittpunkt zweier Liniensegmente: JOIN_BEVEL (keine Änderung), JOIN_MTTER (spitzes Ende, Standardwert), JOIN_ROUND (abgerundetes Ende).

2. Farbattribut
Das Farbattribut steuert den Fülleffekt. Rufen Sie zunächst die folgende Methode auf, um den Fülleffekt zu bestimmen, und legen Sie ihn mit der Methode setPaint () fest.
GradientPaint(float x1, float y1, Color c1, float x2, flaot y2, Color c2): Von (x1, y1) bis (x2, y2), der Farbverlauf von c1 bis c2. Darunter: Die Parameter c1 und c2 bestimmen die Verlaufsfarbe von Farbe c1 zu Farbe c2. Die Parameter x1, y1, x2, y2 bestimmen die Stärke des Farbverlaufs, d. h. ausgehend von Punkt (x1, y1) bis Punkt (x2, y2) ändert sich die Farbe von c1 nach c2.
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean cyclisch): Wenn Sie möchten, dass der Farbverlauf die Farbe des Endpunkts und des Startpunkts hat, sollte zyklisch auf eingestellt werden WAHR.

3. Transformationsattribut
Das Transformationsattribut wird verwendet, um gängige Transformationsoperationen wie grafische Übersetzung, Skalierung und Abschrägung zu implementieren. Erstellen Sie zunächst ein AffineTransform-Objekt und rufen Sie dann die Methode setTransform() auf, um das Transformationsattribut festzulegen. Abschließend werden die Grafiken mithilfe eines Graphics2D-Objekts mit angegebenen Eigenschaften gezeichnet. Die Methoden zum Erstellen von AffineTransform-Objekten sind:

getRotateinstrance(double theta): Theta-Bogenmaß drehen.

getRotateInstance(double theta,dioble x,double y): Um das Rotationszentrum (x, y) drehen.

getScaleInstance(double sx,double sy): Die x- und y-Richtung werden entsprechend dem Verhältnis von sx bzw. sy transformiert.

getTranslateInstance(double tx,double ty): Übersetzungstransformation.

getShearInstance(double shx,double shy): Oblique-Transformation, Shx und Shy geben den Grad der Oblique an.

Sie können auch zuerst ein AffineTransform-Objekt ohne Transformationsattribute erstellen und dann die folgenden Methoden verwenden, um die Grafiktransformations-, Rotations- und Skalierungstransformationsattribute anzugeben.

transelate(double dx,double dy): Verschieben Sie die Grafik um dx Pixel in Richtung der x-Achse.

scale(double sx,double sy): Das Diagramm wird sx-mal in Richtung der x-Achse und sy-mal vertikal skaliert.

rotate(double arc,double x, double y): Der Graph verwendet Punkt (x, y) als Achsenpunkt und dreht den Bogen im Bogenmaß.

Erstellen Sie beispielsweise ein AffineTransform-Objekt:

AffineTransform trans = new AffineTransform();
Nach dem Login kopieren

Geben Sie das Attribut der Rotationstransformation um den Punkt für das AffineTransform-Objekt an:

Trans.rotate(50.0*3.1415927/180.0,90,80);
Nach dem Login kopieren

Setzen Sie dann das Objekt g2d ein von Graphics2D mit der obigen Drehung Der „Pinsel“ der Transformationsfunktion:

Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
Nach dem Login kopieren

Zum Schluss rufen Sie die Methode draw() des Graphics2D-Objekts mit der Transformationsfunktion auf und verwenden dabei das Grafikobjekt als Parameter. Unter der Annahme, dass es sich um eine quadratische Kurvenobjektkurve handelt, implementiert der folgende Code das Zeichnen dieser quadratischen Kurve mithilfe des g2d-Objekts mit der obigen Rotationsfunktion:

g2d.draw(curve)
Nach dem Login kopieren

4 🎜 >clip-Attribut wird verwendet, um einen Clipping-Effekt zu erzielen. Um das Clipping-Attribut festzulegen, können Sie die Methode setClip() aufrufen, um die Form des Clipping-Bereichs zu bestimmen. Mehrere setClip()-Operationen werden nacheinander ausgeführt, um den Beschneidungsbereich dort zu erhalten, wo sie sich schneiden.

5. Composit-Attribut

Das Composit-Attribut legt den Effekt des überlappenden Bereichs von Grafiken fest. Verwenden Sie zunächst die Methode AlphaComposite.getInstance (int Rule, float alpha), um das AlphaComposite-Objekt abzurufen, und legen Sie dann den Mischeffekt über die Methode setComposite () fest. Alpha-Werte reichen von 0,0f (vollständig transparent) bis 0,1f (vollständig undurchsichtig).
Zeichnungsmethoden der Graphics2D-Klasse

Die Graphics2D-Klasse behält weiterhin die Zeichenmethoden der Graphics-Klasse bei und fügt viele neue Methoden hinzu. Die neue Methode zeichnet geometrische Formen (Linienstücke, Kreise etc.) als Objekt. Eine Reihe von im Paket java.awt.geom deklarierten Klassen werden zum Erstellen verschiedener Körpergrafikobjekte verwendet. Dazu gehören hauptsächlich:

Line2D-Liniensegmentklasse, RoundRectangle2D-Klasse für abgerundete Rechtecke, Ellipse2D-Ellipsenklasse, Arc2D-Bogenklasse, QuadCurve2D-Quadratkurvenklasse, CubicCurve2D-Kubikkurvenklasse.

Sie müssen die neue Methode der Graphics2D-Klasse verwenden, um eine Grafik zu zeichnen. Erzwingen Sie zunächst in der Neuzeichnungsmethode paintComponent() oder paint() das Parameterobjekt g in ein Graphics2D-Objekt und verwenden Sie dann die von der obigen Grafikklasse bereitgestellte statische Methode Double(), um schließlich das Objekt der Grafik zu erstellen Das Grafikobjekt als Parameter. Rufen Sie die Methode draw() des Graphics2D-Objekts auf, um diese Grafik zu zeichnen. Der folgende Code verwendet beispielsweise die neue Methode von Graphics2D, um Liniensegmente und abgerundete Rechtecke zu zeichnen:

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);
Nach dem Login kopieren
Sie können auch zuerst das vom Paket java.awt.geom bereitgestellte Shape-Objekt verwenden und es mit erstellen Erstellen Sie ein Float-Koordinatenobjekt mit einfacher Genauigkeit oder ein Shape-Objekt mit doppelter Genauigkeit und zeichnen Sie es dann mit der Methode draw(). Der folgende Code erstellt beispielsweise zuerst ein Bogenobjekt und zeichnet dann den Bogen:


Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN);
g2d.draw(arc)//绘制前面创建的图形对象arc
Nach dem Login kopieren
Geometry class of Graphics2D

Line segment

Line2D line = new Line2D.Double(2,3,200,300);//声明并创建线段对象
//起点是(2,3),终点是(200,300)
Nach dem Login kopieren

矩形

Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//声明并创建矩形对象,矩形的左上角是(20,30),宽是300,高是40
Nach dem Login kopieren

圆角矩形

RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15);
//左上角是(20,30),宽是130,高是100,圆角的长轴是18,短轴是15。
Nach dem Login kopieren

椭圆

Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50);
//左上角 (20,30),宽是100,高是50
Nach dem Login kopieren

圆弧

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);
Nach dem Login kopieren

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

y(x)=ax2+bx+c
Nach dem Login kopieren

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

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);
Nach dem Login kopieren

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

y(x)=ax3+bx2+cx+d
Nach dem Login kopieren

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

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);
Nach dem Login kopieren

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

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

Y=sin(x)+cos(x),x
Nach dem Login kopieren

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

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);//画一个圆点作为图像点
}
Nach dem Login kopieren

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


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!