2014-11-15 5 views
1

그래픽 형식을 그리는 이미지보다 많은 기능을 갖기 위해 Graphics 형식을 Paint 메서드 내 Graphics2d 형식으로 캐스팅하는 사람들이 많이 있습니다. 그래픽 유형을 페인트 기능 외부의 graphics2d 유형으로 변환 할 수 있습니까? 필자는 페인트 메서드가 호출 될 때마다 (즉 모든 프레임) 불필요하게 매번 Graphics2D 유형으로 캐스팅하므로 성능 문제가 비명을 지른다.페인트 방법 캐스팅 - 성능

또한 paint 메소드가 호출되고 동일한 화면이 다시 그려 질 때마다 Java가 최적화를 수행합니까? 예를 들어 화면에서 하나의 요소 만 이동하는 경우 일반적으로 해당 요소를 업데이트하면됩니다. 그것은 페인트 메서드가 호출 될 때마다 자바가 다시 그려지고 전체 화면을 다시 처리하는 것처럼 보입니다. 나에게 이것은 모두 불필요하게 집중적으로 처리되는 것처럼 보입니다.

예제 코드 :

public void paint(Graphics g) { 
    AffineTransform transformer = new AffineTransform(); 
    transformer.translate(5,5); 
    transformer.scale(2,2); 
    Graphics2D g2d = (Graphics2D)g; 
    g2d.setTransform(transformer); 
    // draw to g2d. 
} 
+0

왜 성능이 성능에 영향을 줍니까? – khelwood

답변

1

당신 주 :이 페인트 방법은 호출 될 때마다 때문에 성능 문제 (즉, 모든 프레임) 당신은 불필요하게의 Graphics2D 유형으로 캐스팅 비명 나에게

매번.

최소 비용이 들기 때문에 걱정하지 않아도됩니다. 대신 프로그램을 프로파일 링하고 프로파일 러에서 중요한 병목에 집중하십시오.

그래픽 유형을 페인트 기능 외부의 graphics2d 유형으로 변환 할 수 없습니까?

번호 또한

, 자바 페인트 메서드가 호출되고 같은 화면이 다시 그려지는 때마다 어떤 최적화를합니까? 예를 들어 화면에서 하나의 요소 만 이동하는 경우 일반적으로 해당 요소를 업데이트하면됩니다. 그것은 페인트 메서드가 호출 될 때마다 자바가 다시 그려지고 전체 화면을 다시 처리하는 것처럼 보입니다. 나에게 이것은 모두 불필요하게 집중적으로 처리되는 것처럼 보입니다.

저는 그렇게 생각하지 않습니다. 내가 한 것은 1) 내 정적 이미지를 표시하고 내 동적 이미지를 직접 그릴 수있는 BufferedImage를 만든 다음 2) 필요한 경우 Rectangle을 허용하는 repaint(...) 메서드 오버로드를 사용하여 그려지는 영역을 제한하는 것입니다.