Java java지도 시간 Java의 Graphics2D 클래스 기본 사용법 튜토리얼

Java의 Graphics2D 클래스 기본 사용법 튜토리얼

Jan 17, 2017 pm 04:13 PM

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() 작업이 연속적으로 수행되어 교차하는 클리핑 영역을 얻습니다.

5.composit 속성

composit 속성은 그래픽이 겹쳐지는 효과를 설정합니다. 먼저 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;//将对象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 객체를 생성할 수도 있습니다. 단정밀도 부동 좌표 또는 배정밀도 이중 좌표를 선택한 다음 draw() 메서드를 사용하여 그립니다. 예를 들어, 다음 코드는 먼저 호 객체를 생성한 다음 호를 그립니다.


Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN);
g2d.draw(arc)//绘制前面创建的图形对象arc
로그인 후 복사

Graphics2D의 Geometry 클래스

Line 세그먼트

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中文网!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까? 카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까? Mar 17, 2025 pm 05:44 PM

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까? Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까? Mar 17, 2025 pm 05:35 PM

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

Java에서 기능 프로그래밍 기술을 어떻게 구현할 수 있습니까? Java에서 기능 프로그래밍 기술을 어떻게 구현할 수 있습니까? Mar 11, 2025 pm 05:51 PM

이 기사는 Lambda 표현식, 스트림 API, 메소드 참조 및 선택 사항을 사용하여 기능 프로그래밍을 Java에 통합합니다. 간결함과 불변성을 통한 개선 된 코드 가독성 및 유지 관리 가능성과 같은 이점을 강조합니다.

캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까? 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까? Mar 17, 2025 pm 05:43 PM

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까? 고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까? Mar 17, 2025 pm 05:46 PM

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

비 블로킹 I/O에 Java의 NIO (새로운 입력/출력) API를 어떻게 사용합니까? 비 블로킹 I/O에 Java의 NIO (새로운 입력/출력) API를 어떻게 사용합니까? Mar 11, 2025 pm 05:51 PM

이 기사에서는 선택기와 채널을 사용하여 단일 스레드와 효율적으로 처리하기 위해 선택기 및 채널을 사용하여 Java의 NIO API를 설명합니다. 프로세스, 이점 (확장 성, 성능) 및 잠재적 인 함정 (복잡성,

적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까? 적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까? Mar 17, 2025 pm 05:45 PM

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

네트워크 통신에 Java의 Sockets API를 어떻게 사용합니까? 네트워크 통신에 Java의 Sockets API를 어떻게 사용합니까? Mar 11, 2025 pm 05:53 PM

이 기사는 네트워크 통신을위한 Java의 소켓 API, 클라이언트 서버 설정, 데이터 처리 및 리소스 관리, 오류 처리 및 보안과 같은 중요한 고려 사항에 대해 자세히 설명합니다. 또한 성능 최적화 기술, i

See all articles