2009-11-05 4 views
19

의 역할은 어떻게 자바의 drawImage()가 무엇을 어떻게 사용해야한다 무엇입니까? 나는 곧 JDK 문서를 찾을 수 없다. 예를 들어 모든 drawImage 서명에는 ImageObserver가 필요하지만이 설명서는 새로운 사용자에게는별로 도움이되지 않습니다.자바 Graphics.drawImage() 작업과의 ImageObserver

답변

25

필요 어떤했다. ImageObserver 매개 변수는 그리기 작업의 진행 상황을 알려주는 콜백입니다. 실제로 Image 매개 변수를 비동기 적으로 가져 오는 경우에만 유용합니다.

  1. 반환 거짓 (즉시)
  2. 이 (로드 모든) 가능한 한 Image만큼을 그릴
  3. : 당신이 그것을 것 불완전하게로드 된 이미지와 drawImage를 호출하는 경우

    는 명확하게하려면 이미지의 더 사용할 수있을 때 당신이 내가 작업하는 경우

  4. 는하고, 미래의 어느 시점에서,

기본적으로 ImageObserver를 호출 n 메모리 Image (파일 시스템에서로드되었거나 프로그램에 의해 생성 됨)은 ImageObserver 매개 변수에 대해 걱정하지 않아도됩니다. 네트워크에서 Image을로드하고 명시 적으로로드 할 때까지 기다리지 않고 을 "완전히"드로잉하려면 ImageObserver을 사용해야합니다.

+0

고마워요.이게 정말 도움이됩니다. –

1

실제로 ImageObserver 매개 변수를 null으로 설정하여 여러 번 항상 drawImage()을 사용했습니다. 좋아 그게 쓸모 의미하지 않는다,하지만 난 당신이 Graphics.drawImage(img, x, y, null) [또는 이와 유사한] 멀리 얻을 수 있습니다 .. 사용을 모른 채

+0

:-) 나는 그렇게 했어. 나는 그것이 문제가 될지 전혀 몰랐다. –

8

Image 객체는 반드시 완전히로드되지 않습니다. Graphics.drawImage가 불완전한 이미지를 호출하면 그것이 할 수있는 이미지의 많은 그리기, 다음 ImageObserver 더 많은 이미지를로드 할 때 (imageUpdate를 호출하여)을 알려줍니다.

ImageObserver

는 경우에 당신은 알림을받지 않습니다, 널 (null)이 될 수 있습니다. 이미지가로드 된 것으로 알려진 경우 또는 이미 다시 칠하기를하는 다른 메커니즘이있는 경우 일반적입니다.

ComponentImageObserver을 구현하고 해당 imageUpdate 메서드는 영향을받는 영역에서 repaint이됩니다.

+1

'imageUpdate'는 애니메이션 이미지에 대해서도 호출됩니다. –

1

다른 사람들이 암시하는 것처럼이 API는 렌더링 될 이미지가 네트워크를 통해로드되는 것으로 가정했을 때 생각되었습니다. 툴킷에 이미지를로드하라고 요구할 때, 이미지는 단지 쉘일 뿐이며, 크기와 픽셀을 알기 위해 필요한 바이트는 여전히 와이어 아래로 기어 들어가고 있습니다. 가 처음 호출 될 때의 drawImage 아무것도 렌더링 수 없다이 경우

. 크기와 픽셀을 사용할 수있게되면 ImageObserver에 알립니다. Component implements ImageObserver의 경우 데이터가 사용 가능할 때 해당 동작을 다시 그리는 것입니다.