Java Applet은 일반적으로 GIF 파일에 저장된 이미지를 표시하는 데 사용됩니다. Java Applet에서 GIF 이미지를 로드하는 것은 매우 간단합니다. Applet에서 이미지 파일을 사용할 때 Image 개체를 정의해야 합니다. 대부분의 Java 애플릿은 GIF 또는 JPEG 형식의 이미지 파일을 사용합니다. 애플릿은 getImage 메소드를 사용하여 이미지 파일을 Image 객체와 연결합니다.
Graphics 클래스의 drawImage 메서드는 Image 객체를 표시하는 데 사용됩니다. 이미지 표시 효과를 향상시키기 위해 많은 애플릿은 이중 버퍼링 기술을 사용합니다. 먼저 이미지를 메모리에 로드한 다음 화면에 표시합니다.
애플릿은 imageUpdate 메소드를 통해 이미 메모리에 있는 이미지의 양을 확인할 수 있습니다.
이미지 로드
Java는 이미지를 이미지 개체로 처리하므로 이미지를 로드할 때 먼저 이미지 개체를 정의해야 합니다.
이미지 그림
그런 다음 getImage 메서드를 사용하여 이미지 개체와 이미지 파일을 연결합니다.
picture=getImage(getCodeBase( ),"ImageFileName.GIF");
getImage 메소드에는 두 개의 매개변수가 있습니다. 첫 번째 매개변수는 www.sun.com/Applet 과 같은 애플릿의 URL 주소를 반환하는 getCodeBase 메소드에 대한 호출입니다. 두 번째 매개변수는 URL에서 로드할 이미지 파일의 이름을 지정합니다. 이미지 파일이 애플릿 하위 디렉터리에 있는 경우 해당 디렉터리 경로가 파일 이름에 포함되어야 합니다.
getImage
메소드를 사용하여 이미지를 로드한 후 애플릿은 Graphics 클래스의 drawImage 메소드를 사용하여 이미지를 표시할 수 있습니다.
g.drawImage(Picture,x,y,this);
표시할 이미지를 지정하고 이미지 왼쪽 상단의 x 및 y 좌표를 지정합니다.
네 번째 매개변수의 목적은 ImageObServer 인터페이스를 구현하는 개체, 즉 imageUpdate 메서드(이 메서드는 나중에 설명)를 정의하는 개체를 지정하는 것입니다.
이미지 표시(ShowImage.java)
//소스 프로그램 목록
import java.awt.*;
import java.applet.*;
공개 클래스 ShowImage는 애플릿을 확장합니다.
Image picure; //이미지 유형의 멤버 변수를 정의합니다.
공개 무효 초기화()
{
picture=getImage(getCodeBase(),"Image.gif") //이미지 로드
}
공공 보이드 페인트(그래픽 g)
{
g.drawImage(picture,0,0,this); //이미지 표시
}
}
이러한 이유로 HTML 파일의 Applet에 대한 설명은 다음과 같습니다.
<HTML>
<TITLE>이미지 애플릿 표시</TITLE>
<애플렛
CODE="ShowImage.class" //클래스 파일 이름은 ShowImage.class입니다.
폭=600
키=400>
</APPLET>
</HTML>
컴파일 후 애플릿을 실행할 때 이미지가 한 번에 생성되지 않습니다. 이는 drawImage 메서드가 반환되기 전에 프로그램이 이미지를 완전히 로드하고 표시하지 않기 때문입니다. 대조적으로, drawImage 메소드는 애플릿의 원래 실행 스레드와 동시에 실행되는 스레드를 생성합니다. 이는 동시에 로드되고 표시되므로 이러한 불연속성이 발생합니다. 디스플레이 효과를 향상시키기 위해. 많은 애플릿은 이미지 이중 버퍼링 기술을 사용합니다. 즉, 이미지가 메모리에 완전히 로드된 다음 화면에 표시되므로 이미지를 한 번에 표시할 수 있습니다.
더블 버퍼링 이미지
이미지의 표시 효과를 향상시키기 위해서는 더블 버퍼링 기술을 사용해야 합니다. 이미지는 먼저 메모리에 로드된 다음 애플릿 창에 표시됩니다.
더블버퍼링 이미지 기술 사용 예(BackgroundImage.java)
//소스 프로그램 목록
import java.awt.*;
import java.applet.*;
공개 클래스 BackgroundImage는 애플릿을 확장합니다. //애플릿 상속
{
이미지 사진;
부울 ImageLoaded=false;
공개 무효 초기화()
{
picture=getImage(getCodeBase(),"Image.gif"); //이미지 이미지 로드 offScreenImage=createImage(size().width,size().height);
//createImage 메소드를 사용하여 이미지 객체 그래픽 생성 offScreenGC=offScreenImage.getGraphics(); //그래픽 객체 가져오기 offScreenGC.drawImage(picture,0,0,this) //오프스크린 이미지 표시}
공공 보이드 페인트(그래픽 g)
{
if(이미지로드됨)
{
g.drawImage(picture,0,0,null); //이미지 표시, 네 번째 매개변수는 null이며 이 값은 아닙니다.
showStatus("완료");
}
또 다른
showStatus("이미지 로딩 중");
}
공개 부울 imageUpdate(이미지 img,int infoflags,int x,int y,int w,int h)
{
if(infoflags= =ALLBITS)
{
이미지로드=true;
다시 칠하기();
거짓을 반환;
}
또 다른
사실을 반환;
}
}
애플릿의 init 메소드를 분석하면 메소드가 먼저 offScreenImage라는 Image 객체를 정의하고 createImage 메소드의 반환 값을 할당한 다음 offScreenGC라는 그래픽 객체를 생성하고 그래픽 환경(비화면 환경)에 할당한다는 것을 알 수 있습니다. 이미지가 생성됩니다. 여기에는 오프스크린 이미지가 그려지기 때문에 애플릿 창에는 이미지가 표시되지 않습니다.
애플릿이 drawImage 메소드를 호출할 때마다 drawImage는 imageUpdate 메소드를 호출하는 스레드를 생성합니다. 애플릿은 imageUpdate 메소드에서 메모리에 로드된 이미지의 양을 결정할 수 있습니다. drawImage에 의해 생성된 스레드는 메서드가 false를 반환할 때까지 imageUpdate 메서드를 계속 호출합니다.
imageUpdate 메소드의 두 번째 매개변수 infoflags를 사용하면 애플릿이 이미지가 메모리에 로드되는 방식을 알 수 있습니다. 이 매개변수는 ImageLoaded와 동일하며 true로 설정되고 repaint 메소드가 호출되어 애플릿 창을 다시 그립니다. 이 메서드는 결국 false를 반환하여 drawImage 실행 스레드가 imageUpdate 메서드를 다시 호출하는 것을 방지합니다.
페인트 메소드에서 애플릿의 작동은 ImageLoaded 변수에 의해 제어됩니다. 이 변수가 true가 되면 페인트 메소드는 drawImage 메소드를 호출하여 이미지를 표시합니다. 페인트 메소드가 drawImage 메소드를 호출할 때 null을 네 번째 매개변수로 사용하여 drawImage가 imageUpdate 메소드를 호출하는 것을 방지합니다. 이때 이미지가 메모리에 로드되었기 때문에 애플릿 창에 이미지 표시가 한 번에 완료될 수 있습니다.