제가 이 블로그에서는 IDL의 각종 그래픽 관련 내용들을 소개하는데 있어서 전반적으로 NG(New Graphics) 체계 기반의 방법들에 치중하는 편이고 DG(Direct Graphics) 체계 기반의 방법들에 대한 소개하는 빈도는 그리 많지는 않은 편입니다. 오늘은 모처럼 DG 체계 기반의 내용을 하나 소개하고자 합니다. 바로 DG 체계에서 컬러를 지정하는데 있어서 RGB 기반으로 지정하는 방법에 관한 것입니다. 예를 들면 빨간색(Red)은 [255, 0, 0], 파란색(Blue)은 [0, 0, 255], 흰색(White)은 [255, 255, 255], 검은색(Black)은 [0, 0, 0]과 같이 RGB 3종값(Triplet)으로 지정하는 것입니다. 사실 NG 체계에서는 원래부터 당연히 이러한 방식이 지원됩니다. 예를 들면 다음과 같습니다.
x = FINDGEN(101)
y = SQRT(x)
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR, $
BACKGROUND_COLOR=[0, 255, 255])
p = PLOT(x, y, COLOR=[255, 0, 0], THICK=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
여기서는 먼저 예제 데이터 x, y를 생성하고 NG 체계에서 WINDOW 및 PLOT 함수를 사용하여 플롯으로 표출하였는데, 그래픽창의 배경색은 [0, 255, 255]라는 색상으로 그리고 플롯 선의 색상은 [255, 0, 0]의 색상으로 설정하였습니다. 참고로 RGB가 [0, 255, 255]인 색상을 흔히 시안(Cyan) 색상이라고 부르기도 합니다. 어쨌든 표출된 모습은 다음과 같습니다.
그런데 이와 같은 색상 설정 방식을 DG 체계에서는 어떻게 처리해야할까요? 일단 표출 과정 자체는 WINDOW 및 PLOT 프로시저를 사용하여 다음과 같이 코딩해볼 수도 있을 것 같습니다.
x = FINDGEN(101)
y = SQRT(x)
WINDOW, XSIZE=600, YSIZE=500
PLOT, x, y, COLOR=[255, 0, 0], BACKGROUND=[0, 255, 255], CHARSIZE=1.5, $
POSITION=[0.1, 0.1, 0.9, 0.9]
일단 DG 체계의 PLOT 프로시저에서는 플롯의 색상은 COLOR 키워드로 그리고 배경색상은 BACKGROUND 키워드로 설정할 수 있습니다. 그런데 위와 같이 컬러의 값을 [R, G, B]와 같은 RGB 3종값들의 형태로 설정하는 것은 DG 체계에서는 허용되지 않는다는 것을 반드시 유념해야 합니다. 따라서 위의 과정을 그대로 실행하면 에러가 발생하게 됩니다.
만약 DG 체계에서 RGB 3종값들로 색상을 설정하고자 한다면 특정한 규칙을 따라야 합니다. 그 규칙에서는 RGB 색상값을 다음과 같은 형태로 받도록 되어 있습니다. RGB 3종값들이 [R, G, B]의 형태로 존재한다고 가정할 경우입니다.
컬러값 = R+G*256L+B*256L^2
이와 같이 원래는 RGB 3종값들의 배열이던 것을 자료형이 긴 정수(Long Integer)인 단일 컬러값으로 환산하는 과정이 필요합니다. 따라서 [255, 0, 0]는 다음과 같이 환산합니다.
c1 = 0+255*256L+255*256L^2
그리고 같은 원리로 [0, 255, 255]도 다음과 같이 환산합니다.
c2 = 255+0*256L+0*256L^2
이렇게 규칙에 맞게 환산된 값들을 컬러값으로 사용해야 합니다. 이러한 원리를 바탕으로 하여 전반적인 표출 과정을 다시 적어보면 다음과 같습니다.
DEVICE, DECOMPOSED=1
WINDOW, XSIZE=600, YSIZE=500, RETAIN=2
c0 = 0+0*256L+0*256L^2
c1 = 0+255*256L+255*256L^2
c2 = 255+0*256L+0*256L^2
PLOT, x, y, COLOR=c0, BACKGROUND=c1, CHARSIZE=1.5, $
POSITION=[0.1, 0.1, 0.9, 0.9]
OPLOT, x, y, COLOR=c2, THICK=2
여기서는 검정색인 [0, 0, 0]에 해당되는 색상도 필요하기 때문에 c0라는 값으로 정의하여 사용하고 있습니다. 그래서 c0는 검정색, c1은 시안색, c2는 빨간색에 해당됩니다. 그리고 PLOT 프로시저를 사용하여 시안색 바탕에 검정색으로 전반적인 표출을 먼저 해놓은 다음 OPLOT 프로시저를 사용하여 플롯 선만 빨간색으로 처리하였습니다. 표출된 모습은 다음과 같습니다.
따라서 DG 체계에서 색상을 RGB의 방식으로 정의하는 것이 필요할 경우에는 이와 같은 방식을 따라야만 합니다. 약간 귀찮은 것은 사실이지만 IDL의 DG 체계가 이런 방식으로 돌아가도록 되어있기 때문에 어쩔 수가 없습니다. 그리고 이와 같이 DG 체계에서 RGB 방식의 색상 지정을 하기 위해서는 DEVICE 명령을 사용하여 DECOMPOSED 키워드의 값을 1로 설정함으로써 IDL의 컬러값 해석 방식이 RGB 상태가 되도록 셋팅하는 것이 가장 우선적으로 선행되어야 합니다. 만약 DECOMPOSED의 값이 0인 상태로 설정된 경우에는 위와 같은 방법은 전혀 작동하지 않는다는 것도 꼭 유의해야 합니다.
사실 DG 체계에서 색상을 지정하는 일반적인 방법은, 필요한 색상이 존재하는 컬러테이블을 불러온 다음 그 안에 있는 256개의 색상들(0~255) 중 하나에 대한 단일 인덱스 값으로 지정하는 방식입니다. 하지만 DG 체계에서도 색상을 RGB 형태로 정의하여 사용하고 싶을 경우에는 위에서 소개한 방식으로 처리하면 된다는 점을 염두에 두시기 바랍니다.
'IDL > Direct Graphics' 카테고리의 다른 글
사용자 정의 커스텀 심볼의 제작 및 적용 (0) | 2022.05.06 |
---|---|
DG 체계에서 RGB 색상 사용법 (0) | 2022.01.25 |
DG 체계에서 Colorbar 사용 방법 (0) | 2017.05.19 |
DG 체계에서 Z-buffer 사용 방법 (업데이트 버전) (0) | 2016.09.02 |
Mac OS용 IDL에서 DG 체계 그래픽 사용시 유의사항 (0) | 2016.07.27 |