며칠을 고심 끝에, 찾아냈다고 해야하나 당연하다고 해야 하나...ㅡ,.ㅡ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 선물

BLOG main image
내 안의 세상과 선물들을 펼쳐보이다. by 선물
우리가 함께 한 날로부터
2054 ...
내 생명이 온 날로부터
814 번째 날.

공지사항

카테고리

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

글 보관함

달력

«   2012/02   »
      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      
Total : 1164691
Today : 18 Yesterday : 67