며칠을 고심 끝에, 찾아냈다고 해야하나 당연하다고 해야 하나...ㅡ,.ㅡa

이전 STB(셋탑박스)에 들어갈 미들웨어의 일부분이 될 application 인 SETUP 프로그램을 개발 중이었다.

TV STB인 관계로 프로그램을 시청하는 중에 "메뉴"버튼을 클릭하면 SETUP 메뉴가 나타나야 한다.

그러다 보니, SETUP 프로그램이 화면 전체를 가리지 않는 이상, SETUP 프로그램 뒤 배경에 영상이 나오게 된다.

디자인적인 미적 효과를 넣게 되면, 뒤 배경 영상 위로 알파값(alpha)을 적용해서 뿌옇게 처리한다던가 등의 왜곡(?)을 줄 수 있겠다.

그 알파값 적용을,

Color c = new Color(r,g,b,a);
g.setColor(c);
g.fillRect(x, y, width, height);

메소드를 통해 화면 구현을 했다.
이 내용을 더블버퍼링으로 변경하면,

Dimension d = getSize();
if ((offGraphics == null) || (d.width != offDimension.width) || (d.height != offDimension.height)) {
     offDimension = d;
     offImage = createImage(d.width, d.height);
     offGraphics = offImage.getGraphics();
}

// (1) offGraphics.clearRect(0, 0, d.width, d.height);
// (2) 최초 배경색으로 채운다. 알파값 적용.
offGraphics.setColor(getBackground());
offGraphics.fillRect(0, 0, d.width, d.height);
// (3) 원하는 알파값을 채운다.
offGraphics.setColor(new java.awt.Color(255, 0, 0, 45));
offGraphics.fillRect(0, 0, 500, 100);
//화면 개체를 그린다.
paintUI(offGraphics);
//실제 화면에 출력한다.
if (offImage != null)
   g.drawImage(offImage, 0, 0, null);

위와 같이 구현할 수 있다.
그런데, 알파값을 적용할 경우, 고려 사항이 있는데, 더블 버퍼링을 구현 함에 있어, 내부 버퍼에서 그림을 그리는 Graphics context를 초기화-clear- 를 하지 않으면, 실제 화면 출력시에 알파값 적용 부분이 처음부터 중첩이 되어 나타나게 된다. 즉, 알파값 적용 부분이 점점 진해져서 알파값 적용이 없어지게 된다.

이때에는, 필히 내부 버퍼의 Graphics context를 clear 해 주도록 하자.
위 코드에서 (1) 부분의 주석을 풀어주면 된다.

물론, 보이지않는 내부 버퍼이긴하나 영역 크기만큼 clear 시키는 거라 시간이 지연되긴 한다.

2008/03/10 18:18 2008/03/10 18:18
Posted by 선물

트랙백 보낼 주소 : http://freestory.net/tc/trackback/132

<< PREV : [1] : ... [65] : [66] : [67] : [68] : [69] : [70] : [71] : [72] : [73] : ... [195] : NEXT >>

BLOG main image
내 안의 세상과 선물들을 펼쳐보이다. by 선물
그때로부터
1539 번째날..

달력

«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

공지사항

카테고리

전체 (195)
여행 (6)
NAS (5)
Android (5)
JAVA (8)
FLEX (1)
모바일 (3)
Web (1)
IPTV (7)
컴퓨터기초 (1)
미투데이 (12)
잡념 (68)
푸념 (4)
문화생활 (2)

글 보관함

Statistics Graph