IDL의 전통적인 그래픽 체계인 DG(Direct Graphics) 체계에서 그림을 그리고 저장하는 방법이라면, 그래픽창을 띄우고 그림을 그리고 TVRD로 캡쳐한 다음 WRITE_~~와 같은 명령으로 그림파일로 저장하는 순서로 하는 것이 일반적인 방법입니다. 그런데 이와 같이 눈으로 보이는 그래픽창을 띄우지않고 메모리상의 가상 그래픽창을 띄워서 그림을 그리고 저장하는 것도 가능합니다. 즉 Z-buffer상에서 모든 작업이 이루어지는 경우인데, 물론 이와 같은 경우 그림을 그리는 과정은 모두 메모리상에서 이루어지므로 실제 눈으로 보이지 않습니다.
물론 이와 같은 방식은 일반적으로 필요하지는 않지만 특수한 경우 필요할 때가 있습니다. 그림을 그리는 작업이 루틴화되어 주기적으로 반복되어야 하는 경우라면 그림 생성을 위하여 매번 그래픽창이 뜨는 것이 불필요할 수도 있습니다. 또는 그래픽창을 띄우지 않고도 조용히 작업들이 진행되는 것이 바람직한 경우도 있을 수 있겠죠. 아니면 그려야 할 그림의 사이즈가 너무 커서 컴퓨터 화면으로 다 커버가 안되는 경우도 해당됩니다. 예를 들면 4000X4000의 크기를 갖는 그림을 그려야 하는 경우가 됩니다. 어쨌든 Z-buffer 기능을 사용하면 더 편한 경우가 꽤 심심치않게 있습니다. 그 방법을 간략하게 소개하려고 합니다. 여기서는 2000X2000의 크기를 갖는 간단한 플롯 그림을 그려서 PNG 파일로 저장하는 예제를 살펴보기로 하겠습니다. 예제 코드는 아래와 같습니다.
SET_PLOT, 'Z'
DEVICE, DECOMPOSED=0
DEVICE, SET_RESOLUTION=[2000, 2000]
LOADCT, 5
x = FINDGEN(101)/100
data = x^2
PLOT, x, data, /NODATA, COLOR=0, BACKGROUND=255, CHARSIZE=2, CHARTHICK=2, THICK=2
OPLOT, x, data, COLOR=120, THICK=2
cap = TVRD(/TRUE)
DEVICE, /CLOSE
SET_PLOT, 'X'
WRITE_PNG, 'test_zbuffer.png', cap
이 예제 코드의 내용을 보면, 앞부분에서 SET_PLOT, 'Z' 라는 명령을 사용하여 그래픽 모드를 Z-buffer 모드로 변경합니다. 그리고 DEVICE 명령의 SET_RESOLUTION이라는 키워드로 메모리상의 그래픽창의 크기를 2000X2000으로 설정하였습니다. 이것은 마치 일반 그래픽 모드에서 WINDOW, XSIZE=2000, YSIZE=2000을 수행하는 것과 같습니다. 적절히 플롯을 그린 다음 그림을 저장하는데, 이 플롯을 그리는데 있어서 컬러가 사용되었습니다. 즉 플롯의 기본 프레임은 검정색으로 그리고 플롯 자체는 붉은색으로 그린 경우입니다. 그러면 그림의 저장도 컬러로 해야 하므로, TVRD로 그래픽 화면(메모리상의)을 캡쳐할 때 /TRUE라는 키워드를 사용하였습니다. 그러면 이 캡쳐된 내용을 WRITE_PNG 명령을 사용하여 그림파일로 저장하면 됩니다. 참고로 뒷부분에서는 DEVICE, /CLOSE 명령을 사용해주고 뒤이어 SET_PLOT, 'X' 명령을 사용하여 그래픽 모드를 원래 모드로 돌아가도록 해주었습니다. 이 명령은 맥 OS나 리눅스의 경우이고, 윈도우즈를 사용하는 경우라면 SET_PLOT, 'win' 으로 하면 됩니다.
위의 예제 코드를 사용하여 만들어본 그림파일은 이 게시물에서 직접 보이게 하기엔 너무 커서 첨부파일로 올려놓았습니다. 2000X2000이면 꽤 큰 사이즈이기 때문에 PLOT 명령에서 선의 두께, 글자의 두께 및 크기 등을 좀 크게 해야 아마 볼만한 그림이 나올겁니다.
'IDL > Direct Graphics' 카테고리의 다른 글
애니메이션 GIF 제작 예제 (0) | 2013.06.12 |
---|---|
Mac OS X에서 CURSOR 명령 문제의 해결 방법 (0) | 2013.03.20 |
플롯상의 각 점들을 서로 다른 색상으로 표출하는 방법 [2] (0) | 2012.07.27 |
극좌표계에서 벡터 표출하기 (0) | 2012.02.07 |
Mac OS X Lion에서 TVRD 사용시 에러 해결방법 (0) | 2011.11.21 |