자바 2D
Java 2D자바 2D는 자바 프로그래밍 언어를 사용해 2차원 그래픽을 그리는 API이다.모든 Java 2D 도면 작업은 궁극적으로 페인트를 사용하여 모양을 채운 후 화면에 결과를 합성하는 것으로 처리될 수 있다.
조직
Java 2D API 및 그 문서는 JDK 6의 일부로 다운로드 가능하다. Java 2D API 클래스는 JDK 6에서 다음 패키지로 구성된다.
java.awt
Java 추상 창 도구 키트의 기본 패키지.java.awt.geom
선, 타원, 사분면 측정과 같은 2차원 기하학적 형태의 자바 표준 라이브러리.java.awt.font
자바에서 글립스를 조작하기 위한 도서관.java.awt.color
색채는 다양한 방법으로 표현될 수 있다.java.awt.image
그래픽 이미지를 조작하는 라이브러리.java.awt.print
종이에 쓰기 위한 도구 라이브러리.
기본개념
이러한 객체는 모든 Java 2D 도면 작업에 필요한 부분이다.
모양들
자바 2D의 모양은 안과 밖을 정의하는 경계선이다.도형 내부의 픽셀은 도면 연산의 영향을 받지만, 외부 픽셀은 영향을 받지 않는다.
직선 세그먼트를 채우려고 하면 어떤 픽셀도 영향을 받지 않으며, 그러한 형태는 픽셀 자체를 포함하지 않기 때문이다.대신 형상에 픽셀이 포함되도록 얇은 직사각형을 사용해야 한다.
페인트
페인트는 채우기 작업의 각 픽셀에 사용할 색상을 생성한다.가장 간단한 페인트는 모든 픽셀에 대해 동일한 색상을 생성하는 입니다.더 복잡한 페인트는 그라데이션, 이미지 또는 실제로 어떤 색의 조합도 만들 수 있다.노란색을 사용하여 원형 모양을 채우면 노란색 원형이 단색인 반면 이미지를 생성하는 페인트를 사용하여 동일한 원형 모양을 채우면 이미지가 원형 컷아웃된다.
컴포지트
그리기 작업 중에는 소스(페인트에 의해 생성되는 픽셀)와 대상(이미 화면에 있는 픽셀)이 있다.일반적으로 소스 픽셀은 단순히 대상 픽셀을 덮어쓰지만 복합 픽셀은 이러한 동작을 변경할 수 있게 한다.
이 합성물은 소스와 목적지 픽셀을 주어 최종 결과물을 만들어 내고 결국 스크린에 나오게 된다.가장 일반적인 합성물은, 대상 픽셀이 어느 정도까지 보이도록, 그려지고 있는 픽셀을 부분적으로 투명한 것으로 취급할 수 있는 것이다.
채우기
도형을 채우기 위해 첫 번째 단계는 도형 안에 있는 픽셀을 식별하는 것이다.이 픽셀들은 채우기 연산의 영향을 받을 것이다.앤티앨리어싱이 활성화된 경우 부분적으로 형상의 안과 바깥쪽에 있는 픽셀은 더 적은 정도로 영향을 받을 수 있다.
그런 다음 페인트를 칠할 각 픽셀에 대해 색상을 생성하도록 요청 받는다.단색 채우기 일반적인 경우, 각 픽셀은 동일한 색상으로 설정된다.
합성물은 페인트가 생성하는 픽셀을 취하여 이미 화면에 나타난 픽셀과 결합하여 최종 결과를 산출한다.
고급 객체
이러한 물체는 위에서 설명한 보다 단순한 물체라는 측면에서 직무를 수행하는 것으로 볼 수 있다.
변형
모든 Java 2D 연산은 형상이 그려질 때 번역, 회전, 깎기, 크기 조정될 수 있도록 변환의 대상이 된다.능동적 변환은 대부분 아무것도 하지 않는 정체성 변환이다.
변환을 사용하여 채우는 것은 단순히 새로운 변형 모양을 만든 다음 그 모양을 채우는 것으로 볼 수 있다.
스트로크
채우기 작업 외에도 자바 2D는 드로잉 작업을 제공한다.채우기는 형상의 내부를 그리는 반면 그리기는 형상의 윤곽을 그린다.윤곽선은 얇은 선처럼 단순하거나 각 대시(대시)에 둥근 모서리가 있는 점선처럼 복잡할 수 있다.
윤곽을 생성하는 것을 담당하는 대상은 스트로크다.입력 모양이 주어지면 스트로크는 윤곽을 나타내는 새로운 모양을 만들어 낸다.예를 들어 무한히 얇은 선 부분(내부는 없음)을 1픽셀 넓이의 직사각형으로 어루만질 수 있다.
따라서 그리기 작업은 쓰다듬어주는 새로운 물체를 만든 다음 그 물체를 채운다고 설명할 수 있다.
기술적으로 말하면 스트로크는 입력 형태를 받아들여 새로운 형태를 만들어내기만 하면 된다.자바 2D와 함께 제공되는 스트로크 구현은 위에서 설명한 개요 규칙을 실행하지만, 맞춤 제작 스트로크는 원하는 모양을 만들 수 있다.
최적화
개념적으로 Java 2D에서 직선 블랙 라인을 그리는 것은 라인 세그먼트를 만들고, 현재의 변환에 따라 변환하며, 그것을 쓰다듬어 얇은 직사각형을 만들고, 이 모양을 쿼리하여 영향을 받는 픽셀을 계산하고, 를 사용하여 픽셀을 생성하고, 그 결과를 화면에 합성하는 것으로 생각할 수 있다.
그러나 각 도면 작업에 대해 이 전체 단계 순서를 수행하는 것은 매우 비효율적일 것이다.따라서 Java 2D는 이러한 많은 단계를 건너뛸 수 있도록 일반적인 그리기 작업을 최적화한다.예를 들어, 페인트가 단순한 솔리드 색상이라면, 실제로 페인트를 칠할 색상 목록을 생성하도록 명령할 필요가 없다.마찬가지로, 기본 완전 불투명 합성물이 사용 중인 경우 합성 작업을 수행하도록 요청하는 것은 실제로 불필요하며 노력을 낭비할 수 있다.
Java 2D는 각 조작에 대해 이 모든 단계를 수행하는 것처럼 보이도록 하기 위해 필요한 최소한의 작업을 수행하므로 뛰어난 유연성과 높은 성능을 모두 유지한다.
목적지
단순성을 위해 이 글에서 제공된 텍스트 예는 화면이 대상 장치라고 가정했다.그러나 대상은 프린터, 메모리 이미지, 심지어 Java 2D 그래픽 명령을 받아 벡터 그래픽 이미지 파일로 변환하는 객체 등 무엇이든 될 수 있다.
Java2D/OpenGL 상호운용성
Java SE 6, Java2D, OpenGL은 상호운용성이 되었으며, 예를 들어 버튼의 아이콘 대신 애니메이션 3D 그래픽을 그릴 수 있게 되었다(JOGL 참조).