자바 Graphics 2D 클래스 의 그래 픽 방법

7915 단어 자바
Graphics 2D 는 Graphics 에서 계승 하여 Graphics 의 그래 픽 기능 을 확장 하고 더욱 강력 한 2 차원 도형 처리 능력 을 가 지 며 기하학 적 모양, 좌표 전환, 색채 관리 와 문자 구조 등 더욱 정확 한 통 제 를 제공 합 니 다.
Graphics2D 는 도형 의 상태 속성 을 추가 하거나 변경 하 는 데 사용 되 는 몇 가지 방법 을 정의 합 니 다.상태 속성 을 설정 하고 수정 하 며 붓 너비 와 붓 의 연결 방식 을 지정 하고 이동, 회전, 크기 조정 또는 편집 을 통 해 도형 을 변환 하 며 도형 을 채 우 는 색상 과 도안 등 을 설정 할 수 있 습 니 다.
도형 상태 속성 은 특정한 대상 으로 저장 합 니 다.
자신의 원본 코드 보기 예:
    /**
     *         
     * @param srcImgPath       
     * @param outImgPath         
     * @param words      
     * @param wordsColor          
//     * @param wordFont           
     * @param picSuffix         
     */
    public static void stamp(String srcImgPath, String outImgPath, String words, Color wordsColor, String picSuffix) {
        try {

            File srcImgFile = new File(srcImgPath); //          
            Image srcImg = ImageIO.read(srcImgFile);
            int srcImgWidth = srcImg.getWidth(null);
            int srcImgHeight = srcImg.getHeight(null);

            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);//        
            Graphics2D g = bufImg.createGraphics();
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
            g.setColor(wordsColor); //        
            Font wordFont = new Font("    ", Font.ITALIC,(srcImgHeight+srcImgWidth)/50);
            g.setFont(wordFont);//          
            g.rotate(Math.toRadians(45), srcImgWidth / 2, srcImgHeight / 2); //    45 
//            int x = srcImgWidth - g.getFontMetrics(g.getFont()).charsWidth(words.toCharArray(), 0, words.length()) - 3;
//            int y = srcImgHeight - 3;
            //         
            FontMetrics fm = sun.font.FontDesignMetrics.getMetrics(wordFont);
            int i = fm.stringWidth(words);
            int start= (srcImgWidth - i) / 2;

            int charWidth1 = 2;
            int halfGap = 4;
//            int x = (srcImgWidth - words.length() * charWidth1) / 40;
            int y = (srcImgHeight - (charWidth1 + halfGap)) / 2;
            g.drawString(words, start, y);
            g.dispose();

            FileOutputStream outImgStream = new FileOutputStream(outImgPath);//      
            ImageIO.write(bufImg,picSuffix, outImgStream);
            outImgStream.flush();
            outImgStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

상용 그래 픽 속성
stroke 속성
stroke 속성 을 설정 하려 면 다음 과 같은 방법 을 호출 할 수 있 습 니 다: Public abstract void setStroke (Stroke s)
stroke 속성 은 선의 너비, 펜 스타일, 선분 연결 방식 또는 짧 은 선 그림 을 제어 하 는 데 사 용 됩 니 다.
stroke 속성 을 설정 하려 면 먼저 Stroke 참조 대상 을 만들어 야 합 니 다. 그러나 Stroke 는 인터페이스 형식 이기 때문에 대상 을 만 들 려 면 이미 알 고 있 는 Basic Stroke 대상 을 만 들 수 있 습 니 다.
Basic Stroke 에서 자주 사용 하 는 구조 방법 은 다음 과 같다. / / 지정 한 속성 을 가 진 옹 골 진 Basic Stroke Public Basic Stroke (float width, int cap, int join) 를 구성 하 는 것 이다.
/ / 지정 한 라인 너비 와 cap, join 스타일 을 기본 값 으로 하 는 옹 골 진 Basic Stroke Public Basic Stroke (float width) 를 구성 합 니 다.
cap 는 점 스타일 입 니 다. 값 은 CAP 입 니 다.BUTT (수식 없 음), CAPROUND (반경 이 화필 너비 의 절반 인 원형 장식 말단), CAPSQUARE (정사각형 끝, 기본 값).
join 은 두 선분 의 교차점 을 정의 하 는 연결 방식 입 니 다: JOINBEVEL (수식 없 음), JOINMITER (첨 형 끝, 기본 값), JOINROUND.
클립 속성
클립 속성 은 커팅 효 과 를 실현 하 는 데 사 용 됩 니 다.커팅 속성 을 설정 하면 다음 과 같은 방법 으로 커팅 구역 의 Shape 를 확인 할 수 있 습 니 다. Public abstract void setClip (int x, int y, int width, int height)
여러 개의 setClip () 을 연속 해서 교차 하 는 커팅 구역 을 얻 습 니 다.
paint 속성
paint 속성 제어 충전 효과, setPaint () 방법 으로 설정: Public abstract void setPaint (Paint paint)
paint 는 사 이 드 라인 과 충전 에 동시에 작용 할 수 있 으 며 단색, 그 라 데 이 션 과 도안 일 수 있 으 며 모든 paint 는 자바. awt. Paint 인 터 페 이 스 를 실현 해 야 합 니 다.Color 류 가 java. awt. Paint 인 터 페 이 스 를 실현 하기 때문에 모든 Color 대상 은 Paint 대상 입 니 다.
 
GradientPaint 클래스: public GradientPaint (float x1, float y1, Color color 1, float x2, float y2, Color color 2)
이 종 류 는 색상 그 라 데 이 션 으로 영역 을 채 우 고 구조 함수 가 정 해진 비율 과 색상 을 지정 합 니 다.그래 픽 엔진 은 첫 번 째 점 에서 두 번 째 점 사이 의 선형 변화 두 가지 색상: (x1, y1) 에서 (x2, y2) 색상 이 c1 에서 c2 로 점차 변 합 니 다.우 리 는 또 색깔 도안 이 중복 을 허용 하 는 지 여 부 를 지정 할 수 있다.
 
TexturePaint 클래스: public TexturePaint (BufferedImage txtr, Rectangle2D anchor)
이 클래스 는 그림 을 평평 하 게 깔 아서 도형 을 채 웁 니 다. 구조 함 수 는 java. awt. image. BufferedImage 와 Rectangle2D 를 받 아서 그림 을 직사각형 에 투사 한 다음 직사각형 을 평평 하 게 깔 습 니 다.
GradientPaint 클래스 나 TexturePaint 클래스 의 대상 을 만 들 고 Graphics 2D 의 setPaint () 방법 으로 충전 효 과 를 설정 할 수 있 습 니 다.
글꼴 속성
모든 텍스트 는 텍스트 를 표현 할 수 있 는 스타일 그래 픽 렌 더 링 을 사용 합 니 다.현재 글꼴 은 글꼴 의 모양 을 결정 합 니 다.자바. awt. Graphics 의 getFont () 방법 과 setFont () 방법 을 계승 하여 글꼴 을 조작 합 니 다.글꼴 설정 이 상대 적 으로 간단 한 작업 에 도 불구 하고 자바 2D 는 텍스트 묘사 에 풍부 한 옵션 을 제공 합 니 다.
변환 속성
transform 속성 은 자주 사용 하 는 도형 이동, 크기 조정, 기울 임 등 변환 작업 을 실현 합 니 다.transform 속성 을 설정 하려 면 setTransform () 을 호출 할 수 있 습 니 다: public abstract void setTransform (AffineTransform Tx)
이 방법 은 AffineTransform 대상 의 인자 가 필요 하기 때문에 먼저 AffineTransform 대상 을 만 든 다음 setTransform () 방법 으로 transform 속성 을 설정 합 니 다.마지막 으로 지정 한 속성 을 가 진 Graphics2D 대상 으로 도형 을 그립 니 다.
AffineTransform 대상 을 만 드 는 방법 은 다음 과 같 습 니 다. / / 회전 변환, 회전 theta 호도 Public static AffineTransform getRotateInstance (double theta)
/ / 회전 중심 (anchorx, anchory) 회전 public static AffineTransform getRotateInstance (double theta, double anchorx, double anchory)
/ / 크기 조정 변환, x 와 y 방향 은 각각 sx, sy 비율 로 Public static AffineTransform getScale Instance (double sx, double sy) 를 변환 합 니 다.
/ / 오류 변환, shx 와 shy 지정 경사 당 김 도 Public static AffineTransform getShearInstance (double shx, double shy)
/ / 이동 변환, tx 와 ty 는 x 와 y 방향 이동 거 리 를 Public static AffineTransform getTranslateInstance (double tx, double ty) 로 표시 합 니 다.
물론 transform 속성 이 없 는 AffineTransform 대상 을 만 든 다음 에 다음 과 같은 방법 으로 도형 이동, 회전, 크기 조정 변환 속성 을 지정 할 수 있 습 니 다. / / 도형 을 x 축 방향 으로 tx 픽 셀 을 이동 시 키 고 y 축 방향 으로 ty 픽 셀 Public void translate (double tx, double ty)
/ / 회전 theta 호도 public void rotate (double theta)
/ / 도형 은 점 (anchorx, anchory) 을 축 점 으로 하고 theta 호도 public void rotate (double theta, double anchorx, double anchory) 를 회전 합 니 다.
/ / 도형 은 x 축 방향 에서 sx 배, 세로 로 sy 배 Public void scale (double sx, double sy) 크기 를 조정 합 니 다.
composit 속성
coposit 속성 은 도형 중첩 구역 의 효 과 를 설정 합 니 다.setComposite () 를 호출 하여 이 속성 을 설정 할 수 있 습 니 다: public abstract void setComposite (Composite comp)
예 를 들 어 알파 Composite. getInstance (int rule, float alpha) 방법 으로 알파 Composite 대상 을 얻 은 다음 setComposite () 방법 으로 혼합 효 과 를 설정 합 니 다.알파 컴 포 지 트 는 그래 픽 과 이미지 에서 혼합 과 투명 효 과 를 구현 하 며, 알파 값 의 범 위 는 0.0f (완전 투명) - 1.0f (완전 불투명) 이다.
 
Graphics 2D 로 그림 그리 기
Graphics 2D 류 는 Graphics 류 의 그래 픽 방법 을 유지 하 는 동시에 새로운 방법 도 많이 추가 했다.새로운 방법 은 기하학 적 도형 (선분, 원 등) 을 대상 으로 그립 니 다.java. awt. geom 패키지 에서 설명 하 는 일련의 종 류 는 각각 각종 신체 도형 대상 을 만 드 는 데 사 용 됩 니 다.주로Line 2D. - 선분 류?RoundRectangle2D - 원 각 직사각형 류?Ellipse2D - 타원 류?Arc2D. - 원호 류?QuadCurve 2D - 이차 곡선 류?CubicCurve 2D - 3 차 곡선 류.
Graphics 2D 류 의 새로운 방법 으로 도형 을 그 려 야 합 니 다.먼저 다시 그 리 는 방법 paintComponent () 또는 paint () 에서 매개 변수 대상 g 를 Graphics 2D 대상 으로 강제로 변환 합 니 다.그 다음 에 상기 도형 류 가 제공 하 는 정적 내부 구조 방법 Double () 또는 Float () 으로 이 도형 의 대상 을 만 듭 니 다.마지막 으로 그래 픽 대상 을 매개 변수 로 Graphics 2D 대상 의 draw () 방법 으로 이 그림 을 그립 니 다.
선 을 그립 니 다: / * 선 을 그립 니 다 * / Stroke s = new Basic Stroke (20, Basic Stroke. CAP ROUND, Basic Stroke. JOIN MITER);g2d.setStroke(s); Line2D line = new Line2D.Double(30,50,100,200); g2d.draw(line);
원 각 사각형 그리 기: / * 원 각 사각형 그리 기 * / g2d. setColor (Color. BLUE);RoundRectangle2D rect = new RoundRectangle2D.Double(100, 50, 100, 50, 4, 4); g2d.draw(rect);
일정한 각 도 를 회전 하 는 사각형 을 그립 니 다: / * 일정한 각 도 를 회전 하 는 사각형 을 그립 니 다 * / Rectangle2D rect 2 = new Rectangle2D. Double (60, 160, 60, 90);AffineTransform transform = new AffineTransform(); transform.rotate(45 * Math.PI / 180, 90, 200); // (90, 200) 점 을 중심 으로 회전 도형 45 도 g2d. setTransform (transform);g2d.draw(rect2);

좋은 웹페이지 즐겨찾기