JavaのGraphics2Dクラスの基本的な使い方チュートリアル

高洛峰
リリース: 2017-01-17 16:13:56
オリジナル
1254 人が閲覧しました

Java 言語は Graphics クラスを拡張して、描画用のさまざまな基本的な幾何学的図形を提供することに基づいて Graphics2D クラスを提供します。これは、より強力な 2 次元グラフィックス処理機能を備え、座標変換、カラー管理、テキスト レイアウトなどを提供します。 。

描画プロパティ

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 オブジェクトを作成するメソッドは次のとおりです:

getRotateinstrance(double theta): シータ ラジアンを回転します。

getRotateInstance(double theta,dioble x,double y): 回転中心 (x, y) を中心に回転します。

getScaleInstance(double sx,double sy): x 方向と y 方向は、それぞれ sx と sy の比率に従って変換されます。

getTranslateInstance(double tx,double ty): 翻訳変換。

getShearInstance(double shx,double shy): 斜角変換、shx と shy は斜角度を指定します。

最初に変換属性なしで AffineTransform オブジェクトを作成し、次に次のメソッドを使用してグラフィックスの変換、回転、スケーリング変換属性を指定することもできます。

transelate(double dx,double dy): グラフィックを x 軸方向に dx ピクセルずつ移動します。

scale(double sx,double sy): グラフは、x 軸方向に sx 倍、垂直方向に sy 倍にスケールされます。

rotate(double arc, double x, double y): グラフは点 (x, y) を軸点として使用し、円弧ラジアンを回転します。

たとえば、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(curve)
ログイン後にコピー

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 rRect = new RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0);
g2d.draw(rRect);
ログイン後にコピー

最初に java.awt.geom パッケージによって提供される Shape オブジェクトを使用し、単精度の Shape オブジェクトを作成することもできます。 Float 座標または倍精度 Double 座標を使用して、draw() メソッドを使用して描画します。たとえば、次のコードは、最初に円弧オブジェクトを作成し、次に円弧を描画します。
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 arc3 = new Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
ログイン後にコピー

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

y(x)=ax2+bx+c
ログイン後にコピー

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

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);
ログイン後にコピー

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

y(x)=ax3+bx2+cx+d
ログイン後にコピー

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

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);
ログイン後にコピー

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

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

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);//画一个圆点作为图像点
}
ログイン後にコピー

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


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!