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,float 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을 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() 메서드가 그래픽 객체를 매개변수로 호출됩니다. 예를 들어, 2차 곡선 개체 곡선이 있다고 가정하면 다음 코드는 위의 회전 함수와 함께 g2d 개체를 사용하여 이 2차 곡선 그리기를 구현합니다.
g2d.draw(곡선);
4. 클립 속성
Clip 속성은 클리핑 효과를 얻기 위해 사용됩니다. 클리핑 속성을 설정하려면 setClip() 메서드를 호출하여 클리핑 영역의 모양을 결정할 수 있습니다. 여러 setClip() 작업이 연속적으로 수행되어 교차하는 클리핑 영역을 얻습니다.
5. 복합 속성
합성 속성은 그래픽이 겹치는 영역의 효과를 설정합니다. 먼저 AlphaComposite.getInstance(int rule, float alpha) 메소드를 사용하여 AlphaComposite 객체를 가져온 다음 setComposite() 메소드를 통해 혼합 효과를 설정합니다. 알파 값의 범위는 0.0f(완전 투명)부터 0.1f(완전 불투명)까지입니다.
Graphics2D 클래스의 그리기 방법
Graphics2D 클래스는 여전히 Graphics 클래스의 그리기 메서드를 유지하면서 많은 새로운 메서드를 추가합니다. 새로운 방법은 기하학적 모양(선분, 원 등)을 객체로 그립니다. java.awt.geom 패키지에 선언된 일련의 클래스는 다양한 본문 그래픽 객체를 생성하는 데 사용됩니다. 주요 내용은 다음과 같습니다.
Line2D 선분 클래스, RoundRectangle2D 둥근 사각형 클래스, Ellipse2D 타원 클래스, Arc2D 호 클래스, QuadCurve2D 2차 곡선 클래스, CubicCurve2D 3차 곡선 클래스.
Graphics2D 클래스의 새로운 메서드를 사용하여 그래픽을 그립니다. 먼저, 다시 그리기 메소드인 PaintComponent() 또는 Paint()에서 매개변수 객체 g를 Graphics2D 객체에 강제로 적용한 다음, 위의 그래픽 클래스에서 제공하는 정적 메소드 Double()을 사용하여 마지막으로 그래픽 객체를 생성합니다. 매개변수로서의 그래픽 객체 이 그래픽을 그리려면 Graphics2D 객체의 draw() 메소드를 호출하십시오. 예를 들어, 다음 코드는 Graphics2D의 새로운 메서드를 사용하여 선분과 둥근 사각형을 그립니다.
Graphics2D g2d = (Graphics2D)g;//Graphics에서 Graphics2D로 객체 g 유형을 변환합니다. 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); g2d.draw(rRect);
또한 먼저 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 ect = new Rectangle2D.Double(20,30,80,40);//사각형 객체를 선언하고 생성합니다. 직사각형의 왼쪽 위 모서리는 (20, 30)이고 너비는 300, 높이는 40입니다.
둥근 직사각형
RoundRectangle2D retRound = 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 매개변수는 각각 호가 개방형 호, 활형 호 또는 파이 호인지 여부를 나타냅니다.
2차 곡선 2차 곡선은 2차 다항식으로 표현됩니다.
y(x)=ax2+bx+c
2차 곡선은 시작점, 제어점, 끝점의 세 점으로 결정되어야 합니다.
QuadCurve2D curve1 = new QuadCurve2D.Double(20,10,90,65,55,115); QuadCurve2D curve2 = new QuadCurver2D.Double(20,10,15,63,55,115); QuadCurver2D.Double(20,10,54,64,55,115);
Double() 메소드의 6개 매개변수는 2차 곡선의 시작점, 제어점 및 끝점입니다. 위 세 이차 곡선의 시작점과 끝점은 동일합니다.
3차 곡선 3차 곡선은 3차 다항식으로 표현됩니다.
y(x)=ax3+bx2+cx+d
3차 곡선을 결정하려면 시작점, 두 개의 제어점, 끝점 등 4개의 점이 필요합니다.
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.Double(12,30,50,75,20,95,95,95);
Double() 메소드의 8개 매개변수는 3차 곡선의 시작점, 두 개의 제어점 및 끝점입니다.
일반 방정식 곡선을 그리는 과정은 루프로 제어됩니다. 루프를 통해 독립변수의 값을 생성하고 방정식에 따라 함수값을 계산한 다음 필요한 좌표 변환을 수행합니다. 원점 위치 지정을 위한 변환 변환, 이미지 축소 또는 확대를 위한 스케일링 변환, 곡선의 이미지 점 획득, 그리고 이 점을 그려주세요. 다음 곡선 방정식을 예로 들어 보겠습니다.
Y=사인(x)+코사인(x),x
그리기 코드의 일부는 다음과 같이 작성할 수 있습니다.
더블 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);// 원 포인트를 이미지 포인트로 사용}