Java 언어는 다양한 기본 기하학적 도형을 제공하는 Graphics 클래스를 기반으로 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(사각형 끝, 기본값).
Join은 JOIN_BEVEL(수정 없음), JOIN_MTTER(뾰족한 끝, 기본값), JOIN_ROUND(둥근 끝)의 두 선분 교차점에서 연결 방법을 정의합니다.
2. 페인트 속성
페인트 속성은 채우기 효과를 제어합니다. 먼저 다음 메소드를 호출하여 채우기 효과를 확인하고, setPaint() 메소드를 사용하여 설정합니다.
GradientPaint(float x1, float y1, Color c1, float x2, floot 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 cyclo): 그라데이션이 끝점과 시작점의 색상이 되도록 하려면 cyclic을 다음으로 설정해야 합니다. 진실.
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);
그런 다음 g2d 개체에 대해 위의 회전 변환 함수를 설정합니다. of Graphics2D. "Brush":
Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
마지막으로 그래픽 객체를 매개변수로 사용하여 변환 함수가 포함된 Graphics2D 객체의 draw() 메서드를 호출합니다. 예를 들어, 2차 곡선 개체 곡선이 있다고 가정하면 다음 코드는 위의 회전 함수와 함께 g2d 개체를 사용하여 이 2차 곡선 그리기를 구현합니다.
g2d.draw(curve)
4. 클립 속성은 클리핑 효과를 얻는 데 사용됩니다. 클리핑 속성을 설정하려면 setClip() 메서드를 호출하여 클리핑 영역의 모양을 결정할 수 있습니다. 여러 setClip() 작업이 연속적으로 수행되어 교차하는 클리핑 영역을 얻습니다.
composit 속성은 그래픽이 겹쳐지는 효과를 설정합니다. 먼저 AlphaComposite.getInstance(int rule, float alpha) 메소드를 사용하여 AlphaComposite 객체를 가져온 다음 setComposite() 메소드를 통해 혼합 효과를 설정합니다. 알파 값의 범위는 0.0f(완전 투명)부터 0.1f(완전 불투명)까지입니다.
Graphics2D 클래스의 그리기 방법
Line2D 선분 클래스, RoundRectangle2D 둥근 사각형 클래스, Ellipse2D 타원 클래스, Arc2D 호 클래스, QuadCurve2D 2차 곡선 클래스, CubicCurve2D 3차 곡선 클래스.
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);
Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//绘制前面创建的图形对象arc
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中文网!