さまざまな基本的な幾何学的図形を提供する Graphics クラスに基づいて、Java 言語は Graphics クラスを拡張して、より強力な 2 次元グラフィックス処理機能を備え、より正確な座標変換、カラー管理、およびテキスト レイアウトを提供する Graphics2D クラスを提供します。 。 コントロール。
図面のプロパティ
Graphics2D は、グラフィックスの状態プロパティを追加または変更するためのいくつかのメソッドを定義します。状態プロパティを設定および変更することで、ブラシの幅とブラシの接続方法を指定できます。変換グラフィックスの移動、回転、拡大縮小、トリミングの設定、塗りつぶされたグラフィックスの色やパターンの設定などを行うことができます。グラフィックス状態プロパティは、特定のオブジェクトを使用して保存されます。
1. ストローク属性
ストローク プロパティは、線の幅、ペン スタイル、セグメントの接続方法、または破線パターンを制御します。このプロパティを設定するには、まず BasicStroke オブジェクトを作成し、次に setStroke() メソッドを呼び出して設定する必要があります。 BasicStroke オブジェクトを作成するメソッドは次のとおりです。
BasicStroke(float w): 線幅wを指定します。
BasicStroke(float w、int cap、int join):
cap はエンドポイントです: CAP_BUTT (未変更)、CAP_ROUND (半円形の端)、CAP_SQUARE (正方形の端、デフォルト値)。
結合は、2 つの線分の交点での接続方法を定義します: JOIN_BEVEL (未変更)、JOIN_MTTER (尖った端、デフォルト値)、JOIN_ROUND (丸い端)。
2.ペイント属性
ペイント プロパティは塗りつぶし効果を制御します。まず、次のメソッドを呼び出して塗りつぶし効果を決定し、setPaint() メソッドを使用して設定します。
GradientPaint(float x1,float y1,Color c1,float x2,flaot y2,Color c2): (x1,y1) から (x2,y2) まで、c1 から c2 へのカラー グラデーション。その中で、パラメータ c1 と c2 は、色 c1 から色 c2 へのグラデーション色を決定します。パラメータ x1、y1、x2、y2 はグラデーションの強さを決定します。つまり、点 (x1、y1) から点 (x2、y2) に向かって色が c1 から c2 に変化します。
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean cyclic): グラデーションを終了して開始点の色にしたい場合は、cyclic を true に設定する必要があります。
3. 変換属性
変換属性は、グラフィックスの変換、スケーリング、ベベルなどの一般的な変換操作を実装するために使用されます。まず AffineTransform オブジェクトを作成し、次に setTransform() メソッドを呼び出して変換属性を設定します。最後に、指定されたプロパティを持つ Graphics2D オブジェクトを使用してグラフィックスが描画されます。 AffineTransform オブジェクトを作成するメソッドは次のとおりです。
最初に変換属性を指定せずに AffineTransform オブジェクトを作成し、次に次のメソッドを使用してグラフィックスの変換、回転、およびスケーリング変換属性を指定することもできます。
たとえば、AffineTransform オブジェクトを作成します。
AffineTransform trans = new AffineTransform();
AffineTransform オブジェクトの点を中心とした回転変換プロパティを指定します。
Trans.rotate(50.0*3.1415927/180.0,90,80);
次に、Graphics2D オブジェクト g2d に対して上記の回転変換関数を使用して「ブラシ」を設定します。
Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
最後に、変換関数を備えた Graphics2D オブジェクトのdraw()メソッドが、グラフィックス オブジェクトをパラメータとして呼び出されます。たとえば、二次曲線オブジェクトの曲線があると仮定すると、次のコードは、上記の回転関数を備えた g2d オブジェクトを使用して、この二次曲線の描画を実装します。
g2d.draw(曲線);
4. クリップ属性
クリップ属性は、クリッピング効果を実現するために使用されます。クリッピング属性を設定するには、setClip() メソッドを呼び出してクリッピング領域の形状を決定します。複数の setClip() 操作が連続して実行され、それらが交差するクリッピング領域が取得されます。
5. 複合属性
コンポジット属性は、グラフィックの重なり合う領域の効果を設定します。まず、AlphaComposite.getInstance(int rules, float alpha) メソッドを使用して AlphaComposite オブジェクトを取得し、次に setComposite() メソッドを通じて混合効果を設定します。アルファ値の範囲は 0.0f (完全に透明) から 0.1f (完全に不透明) です。
Graphics2Dクラスの描画メソッド
Graphics2D クラスは、Graphics クラスの描画メソッドを保持しつつ、多くの新しいメソッドを追加します。新しいメソッドは、幾何学的形状 (線分、円など) をオブジェクトとして描画します。 java.awt.geom パッケージで宣言された一連のクラスは、さまざまなボディ グラフィックス オブジェクトを作成するために使用されます。主なものは次のとおりです。
Line2D 線分クラス、RoundRectangle2D 角丸長方形クラス、Ellipse2D 楕円クラス、Arc2D 円弧クラス、QuadCurve2D 二次曲線クラス、CubicCurve2D 三次曲線クラス。
Graphics2D クラスの新しいメソッドを使用してグラフィックを描画します。まず、再描画メソッドのpaintComponent()またはpaint()で、パラメータ・オブジェクトgをGraphics2Dオブジェクトに強制的に追加し、次に、上記のグラフィックス・クラスによって提供される静的メソッドDouble()を使用して、グラフィックスのオブジェクトを作成します。パラメータとしてグラフィックス オブジェクトを指定します。 Graphics2D オブジェクトのdraw() メソッドを呼び出して、このグラフィックスを描画します。たとえば、次のコードは Graphics2D の新しいメソッドを使用して線分と角丸四角形を描画します。
Graphics2D g2d = (Graphics2D)g;// オブジェクト g タイプを Graphics から Graphics2D に変換します。 Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0); g2d.draw(line); RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0);
最初に java.awt.geom パッケージで提供される Shape オブジェクトを使用し、単精度 Float 座標または倍精度 Double 座標で Shape オブジェクトを作成し、次にdraw() メソッドを使用して描画することもできます。たとえば、次のコードは円弧オブジェクトを作成し、円弧を描画します。
Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//以前に作成したグラフィックス オブジェクトの円弧を描画します
Graphics2D のジオメトリ クラス
線分
Line2D line = new Line2D.Double(2,3,200,300);//線分オブジェクトを宣言して作成//始点は(2, 3)、終点は(200, 300)
矩形
Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//長方形の左上隅が (20, 30)、幅が 300、高さが 40 の長方形オブジェクトを宣言して作成します。
角丸長方形
RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15); //左上隅は (20, 30)、幅は 130、高さは 100、丸い角の長軸は 18、短軸は15です。
楕円形
Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50); //左上隅 (20, 30)、幅は 100、高さは 50
アーク
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 アーク 3 = 新しい Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
パラメータ Arc2D.OPEN、Arc2D.CHORD、および Arc2D.PIE は、それぞれ、円弧が開いた円弧、弓状円弧、円弧のいずれであるかを示します。
二次曲線 二次曲線は、次の 2 次多項式で表されます。
y(x)=ax2+bx+c
二次曲線は、始点、制御点、終点の 3 点によって決定する必要があります。
QuadCurve2D カーブ 1 = 新しい QuadCurve2D.Double(20,10,90,65,55,115); QuadCurve2D カーブ 2 = 新しい QuadCurve2D.Double(20,10,15,63,55,115); QuadCurver2D.Double(20,10,54,64,55,115);
Double() メソッドの 6 つのパラメーターは、二次曲線の開始点、制御点、および終了点です。上記 3 つの二次曲線の始点と終点は同じです。
3 次曲線 3 次曲線は 3 次多項式で表されます。
y(x)=ax3+bx2+cx+d
3 次曲線を決定するには、開始点、2 つの制御点、および終了点の 4 つの点が必要です。
CubicCurve2D カーブ 1 = 新しい CubicCurve2D.Double(12,30,50,75,15,15,115,93); = 新しいCubicCurve2D.Double(12,30,50,75,20,95,95,95);
Double() メソッドの 8 つのパラメーターは、3 次曲線の開始点、2 つの制御点、および終了点です。
一般方程式曲線の描画プロセスはループによって制御されます。ループを通じて独立変数の値を生成し、方程式に従って関数値を計算し、必要な座標変換を実行します。原点位置決めのための平行移動変換、画像の縮小または拡大のためのスケーリング変換、曲線の画像点の取得、そしてこの点を描きます。例として、次の曲線方程式を描いてみます。
Y=sin(x)+cos(x),x
描画コードの一部は次のように記述できます。
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);//描画画像点としての円の点}